[문제보기]

 8934. 팰린드롬 공포증

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

[풀이과정]

 문제에서 입력값으로 나오는 문자열에는 'a', 'b', 'c'만 나온다고 했기 때문에

 팰린드롬을 안 만들기 위한 방법은 'abc', 'acb'처럼 3개의 문자가 사용이 됐을 때, 만들어지지가 않는다.

 그렇기 때문에 먼저 'a', 'b', 'c'가 몇 번 나오는지에 대한 개수를 구하였다.

 이후, 'a', 'b', 'c'의 개수 중 min값을 찾은 후 각 개수에 대해 min값을 빼주었다. 그리고 남은 숫자에 대해서

 2 이상이 나올 경우 팰린드롬이 형성('aa', 'bb', 'cc')이 되므로 flag에 false를 넣어주었다.

 

[소스보기]

#include <iostream>
#include <string>
using namespace std;

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

    int T;
    cin >> T;
    for(int test = 1; test <= T; test++){
        string s;
        cin >> s;
        int cnt[3] = {0};
        int Min = 987654321;
        bool flag = true;

        for(int i=0; i<s.size(); i++){
            cnt[s[i] - 'a']++;
        }

        for(int i=0; i<3; i++){
            if(Min > cnt[i])
                Min = cnt[i];
        }

        for(int i=0; i<3; i++){
            cnt[i] -= Min;
            if(cnt[i] >= 2){
                flag = false;
                break;
            }
        }

        cout << "#" << test << " " ;
        if(flag)
            cout << "YES" << "\n";
        else
            cout << "NO" << "\n";


    }
}

 

[해결과정 중 실수한 부분]

 문제를 보고 생각을 했는데 어떻게 풀어야 될지 몰라서 블로그를 참고를 했다.

 

[참고한 자료]

https://m.blog.naver.com/tkddn0928/221755198354