반응형
https://www.acmicpc.net/problem/9324
간단한 문자열 이용 구현문제였습니다.
📕 풀이방법
📔 입력 및 초기화
test case수 t, 나온 문자를 확인할 일차원배열 ck, 받은 message msg, 원래 message originMsg를 선언 후 적절히 입력받습니다.
📔 풀이과정
원래 message를 역추적해야합니다.
전달받은 message는 algorithm이 적용된 결과물로 msg에 저장되어 있습니다. 하지만 우리는 이것을 원문처럼 생각할 수 있습니다. 매 3번째나온 문자마다 다음문자를 skip하면 됩니다. 이 문자열의 길이만큼 for loop를 수행합니다.
1. 매 loop마다 originMsg에 msg의 문자를 하나씩 더합니다.
2. 만약 현재보는 문자가 ck배열을 확인했을 때 3번 째 나왔다면 그 문자를 originMsg에 한 번 더해줍니다. 그 후 문자에 해당하는 ck의 index에 접근해 값을 0으로 저장하고 문자 하나를 skip해줍니다.
📔 정답출력
1. originMsg가 msg와 같다면 algorithm을 적용한 유효 문자열이 전달받은 문자열과 같으므로 진짜입니다.
2. 아니면 가짜입니다.
조건에 맞춰 정답을 출력합니다.
📕 Code
#include <bits/stdc++.h>
using namespace std;
int t, ck[26];
string msg, originMsg;
int main(){
cin >> t;
while(t--){
memset(ck, 0, sizeof(ck));
originMsg = "";
cin >> msg;
for(int i = 0; i < msg.size(); i++){
ck[msg[i]-'A']++;
originMsg += msg[i];
if(ck[msg[i]-'A'] == 3){
originMsg += msg[i];
ck[msg[i]-'A'] = 0;
i++;
}
}
if(originMsg == msg) cout << "OK\n";
else cout << "FAKE\n";
}
}
'Algorithm > String' 카테고리의 다른 글
(C++) - 백준(BOJ) 25372 : 성택이의 은밀한 비밀번호 (2) | 2022.07.18 |
---|---|
(C++) - 백준(BOJ) 15000 : CAPS (0) | 2022.07.14 |
(C++) - 백준(BOJ) 5555 : 반지 (0) | 2022.04.01 |
(C++) - 프로그래머스(2020 KAKAO BLIND RECRUITMENT) : 문자열 압축 (0) | 2021.08.21 |
(C++) - 백준(BOJ) 1755번 : 숫자놀이 (0) | 2021.08.16 |