본문 바로가기

백준/실버

[백준 9324번] 진짜 메시지 (C++)

문제링크 : https://www.acmicpc.net/problem/9324

 

9324번: 진짜 메시지

스파이들은 사령부와 통신하기 위해서 SMTP(비밀 메시지 전송 프로토콜)를 사용해 비밀 회선으로 전자 메시지를 보낸다. 메시지가 적들에 의해 조작되어 보내진 것이 아닌 진짜 메시지라는 것

www.acmicpc.net

 

#include <bits/stdc++.h>
using namespace std;
#define ll long long

int main(void) {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int check[26];
    int T;
    cin >> T;
    while(T--)
    {
        memset(check, 0, sizeof(check));
        string result="";
        string M;
        cin >> M;
        for(int i=0; i<M.length(); i++)
        {
            check[M[i]-'A']++;  //해당 알파벳 갯수 카운트
            result+=M[i];
            if(check[M[i]-'A'] == 3)
            {
                result+=M[i];
                check[M[i]-'A'] -= 3;
                i++;
            }
        }
        if(result==M)
        {
            cout << "OK" <<"\n";
        }
        else
        {
            cout<<"FAKE"<<"\n";
        }
    }
    return 0;
}

알파뱃의 갯수인 26만큼의 크기를 가진 배열을 선언하고, 각각 알파벳의 갯수를 저장한다.

따로 더해주는 문자열을 저장할 문자열을 선언하고, 각 문자를 더해가다가 알파벳 갯수가 3개가 되면 해당 알파벳을 하나 더 더해주고, 해당 배열값을 3빼준다(초기화)

이때 반복문의 인덱스값도 더해줌으로써 중복으로 더해주는 것을 방지한다.