문제링크) https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5P1kNKAl8DFAUq


문제는 각줄마다 문장이 입력이 되는데 그 문장에서 반복마디를 구하면된다.

-입력-

KOREAKOREAKOREAKOREAKOREAKOREA

SAMSUNGSAMSUNGSAMSUNGSAMSUNGSA

GALAXYGALAXYGALAXYGALAXYGALAXY

EXOEXOEXOEXOEXOEXOEXOEXOEXOEXO

B1A4B1A4B1A4B1A4B1A4B1A4B1A4B1

APINKAPINKAPINKAPINKAPINKAPINK

BLACKPINKBLACKPINKBLACKPINKBLA

TWICETWICETWICETWICETWICETWICE

REDVELVETREDVELVETREDVELVETRED

ABCABCABCABCABCABCABCABCABCABC

-출력-

#1 5

#2 7

#3 6

#4 3

#5 4

#6 5

#7 9

#8 5

#9 9

#10 3

이문제 핵심은 반복마디가 최소로 반복되는 길이여야 한다. 맨마지막 입력예시를 보면 abcabcabcabc라서 abc가 반복이될수도있고

abcabc가 될수도있고 abcabcabc가 반복될수도 있기에 모두 정답이 될 수 있다. 하지만 출력을 보면 이 반복되는 것들 중에서도 최소의 길이를 갖는

반복패턴을 원한 것을 알 수 있었다.


반복마디의 길이가 최대 10길이여서 

1~10까지의 반복마디를 각각 생성하고나자마자 만들어진 반복마디와 기존배열을 반복마디의 개수만큼 계속해서 비교해나가주었다.

그렇게되면 하나라도어긋나면 정답이 아니게되므로 자연스럽게 반대의 경우만이 정답이 된다.


소스코드)

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
44
45
46
47
48
49
#include<iostream>
using namespace std;
int main()
{
    int test_case;
    cin >> test_case;
    for(int t= 1; t<=test_case; t++)
    {
    
        char str[31];
        char repeat[11]; //반복 문자열 
        int cnt;
        int j;
        int ret;
        int k;
        cin >> str;
        int len; // 반복 길이 
        for(len = 1; len <= 10; len++)
        {
            cnt = 0;
            k = 0;
            for(int i = 0; i<len; i++)
            {
                repeat[i] = str[i];
            }
            
            for( j = len; j<30; j++)
            {
                if(cnt == len)
                {
                    cnt = 0;
                    k = 0;
                }
                if(repeat[k++]!= str[j])
                {
                    break;
                }
                cnt++;
            }
            if(j == 30)
            {
                ret = len;
                break;
            }
        }    
        cout <<"#"<<<<' '<< ret << '\n';
    }    
}
    
cs



반응형

'PS > SWEA' 카테고리의 다른 글

D1 1545번 거꾸로 출력해 보아요  (0) 2022.05.06
5986번 새샘이와 세 소수  (0) 2018.11.03
1859번 백만 장자 프로젝트  (0) 2018.10.13
5550번 나는 개구리로소이다  (0) 2018.10.06
1926번 간단한 369게임  (0) 2018.10.05

+ Recent posts