상세 컨텐츠

본문 제목

8934. 팰린드롬 공포증 D4

알고리즘/SWExpertAcademy

by 아리따운노을 2020. 1. 8. 18:49

본문


어제는 알바 끝나고 운동 갔다가 너무 피곤해서 못썼다... 하체 피로감 + 가슴, 어깨 하니까 집와서 바로 기절해 버렸다

그래서 오늘은 두 문제를 풀어보겠다ㄹ


일단 첫 번째 문제



앞 뒤로 뒤집어도 똑같은 문자열을 ‘팰린드롬’ 이라고 한다.

예를 들어, “o_o404appa” 는 팰린드롬 이지만ummakoosagakriii”는 팰린드롬이 아니다.

상욱이는 팰린드롬에 대한 공포증이 심해서, 어떠한 문자열에 길이 2 이상의 팰린드롬이 등장하는 것을 매우 싫어한다.

상욱이는 어느 날 ‘a’bc’ 세 문자로만 이루어진 문자열을 받았다.

착한 재현이는, 문자열에 있는 문자들을 섞어서 길이 2 이상의 팰린드롬이 등장하지 않게 하려 한다. 

이것이 가능한지 판단하라.


[입력]

첫 번째 줄에 테스트 케이스의 수 TC가 주어진다.

이후 TC개의 테스트 케이스가 새 줄로 구분되어 주어진다.

각 테스트 케이스는 다음과 같이 구성되었다.

첫 줄에, ‘abc’로만 이루어진 문자열 S가 주어진다. S의 길이는 1 이상 100000 이하이다.


 

[출력]
각 테스트 케이스마다 ‘#x’(x는 테스트케이스 번호를 의미하며 1부터 시작한다)를 출력하고,
각 테스트 케이스마다 한 줄씩, S에 길이 2 이상의 팰린드롬이 등장하지 않게 할 수 있다면
YES, 아니면 NO를 출력한다.




대충 a,b,c로 이루어진 문장을 입력받아 이 문장을 조합했을 때 길이가 2이상인 펠린드롬이 나오면 안된다는 뜻이다. 그 말인 즉슨 aa,bb,cc와 같이 연속된 문자가 나오면 안된다는 뜻이다.

그래서 내 생각은 문장을 입력받고 문장의 a,b,c의 개수를 세서 가장 많은 것의 개수와 가장 적은 것의 개수를 뺐을 때 1보다 크면 aa와 같은 길이가 2인 펠린드롬을 만들 수 있다고 생각했다.

그래서 각 문자를 카운트 해 max와 min을 빼 1보다 크면 NO를 출력하면 된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <string>
 
using namespace std;
 
int main()
{
    cin.tie(NULL);
    cout.tie(NULL);
    ios_base::sync_with_stdio(false);
    int TC,acnt,bcnt,ccnt;
    string N;
    cin>>TC;
    for (int t=1;t<=TC;t++)
    {
        cin>>N;
        bool check = true;
        acnt=0,bcnt=0,ccnt=0;
        for(int i=0;i<N.length();i++)
        {
            switch (N[i]){
                case 'a':
                    acnt++;
                    break;
                case 'b':
                    bcnt++;
                    break;
                case 'c':
                    ccnt++;
                    break;
            }
        }
        int temp = max(max(acnt,bcnt),ccnt)-min(min(acnt,bcnt),ccnt);
        if(temp>1)
            check = false;
        if(check)
            cout<<'#'<<t<<" YES\n";
        else
            cout<<'#'<<t<<" NO\n";
    }
    return 0;
}
 
cs

물론 이 방식은 문자가 3개 일때만 해당된다.
4개나 그 이상은 다른 알고리즘으로 풀어야 한다.




'알고리즘 > SWExpertAcademy' 카테고리의 다른 글

2819. 격자판의 숫자 이어 붙이기 D4  (0) 2020.01.17
8673. 코딩 토너먼트1 D3  (0) 2020.01.12
8840. 아바바바 D3  (0) 2020.01.07
9088. 다이아몬드 D4  (0) 2020.01.05
8993. 하지 추측 D4  (0) 2020.01.04

관련글 더보기

댓글 영역