PS

BOJ 9324 : 진짜 메시지

lickelon 2025. 2. 19. 02:00
  • 문제 링크 : boj.kr/9324
  • 난이도 : S4
  • 태그 : 문자열

코드

#include <bits/stdc++.h>

#define all(x) (x).begin(), (x).end()

#define INF 0x7FFFFFFF

using namespace std;

using ll = long long;
using ld = long double;
using pii = pair<int,int>;
using pll = pair<ll, ll>;

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    int T;
    cin >> T;
    while(T--) {
        string s;
        cin >> s;
        int cnt[26] = {};
        bool flag = true;
        for(int i = 0; i < s.length(); i++) {
            int a = s[i]-'A';
            cnt[a]++;
            if(cnt[a] % 4 == 0) {
                flag &= s[i] == s[i-1];
            }
        }
        for(int i = 0; i < 26; i++) {
            if(cnt[i] % 4 == 3) flag = false;
        }
        cout << (flag ? "OK" : "FAKE") << "\n";
    }

    return 0;
}

풀이

조건을 다시 쓰면 다음과 같다.

1. 각 문자의 개수를 4x+3이 아니다.

2. 4k번째로 나온 어떤 문자는 그 직전의 문자와 동일하다.

이제 조건을 확인하기 쉬워졌으니 잘 체크해주면 된다.

728x90