SWEA/[D2]

[C] SWEA 2007 패턴 마디의 길이

ruming 2022. 3. 3. 03:32

패턴에서 반복되는 부분을 마디라고 한다. 마디의 길이를 출력하라.

제한 : 문자열의 길이는 30, 마디의 최대 길이는 10이다.

 

첫번째 알파벳과 같은 알파벳이 나오면 그 뒤에도 같은지 검사한다. 

#include <stdio.h>
#include <string.h>
int main(void) {
    int test_case, T;
    scanf("%d", &T);
    for (test_case = 1; test_case <= T; test_case++) {
        char ch[31] = { 0 };
        scanf("%s", &ch);
        int len = strlen(ch), flag = 0, cnt = 0;
        printf("#%d ", test_case);
        for (int i = 1; i < len; i++) {
            if (ch[0] == ch[i]) {
                for (int j = 0; j < i; j++) {
                    if (ch[j] != ch[i + j]) {
                        break;
                    }
                    if (j == i - 1) {
                        flag = 1;
                        cnt = i;
                    }
                }
            }
            if (flag == 1)   break;
        }
        printf("%d\n", cnt);
    }
    return 0;
}

ch에 문자열을 입력받고 길이를 구해준다. 

구해준 길이만큼 for문을 돌리고 첫번째 알파벳이 나오면 for문을 또 돌려 다음 글자가 같은지 확인한다.

다음 글자가 다르면 안의 for문을 빠져나와 다시 같은 알파벳이 나올때까지 검사하고, j가 마지막 순서일 때까지 같으면 마디라는 의미니 flag를 1로 바꾸고 cnt에 i를 저장한다. i는 마디의 길이다.

flag가 1이면 마디를 찾았다는거니 for문을 빠져나오고 cnt를 출력한다.

 

 

댓글을 보니 테스트케이스가 좀 부족한 것 같다.

내 코드는 samsamsungsamsamsung의 경우 3을 출력하고 mmmommmo의 경우 1을 출력한다.

위의 경우를 추가하면 문제 난이도가 올라갈 것 같다. 나중에 정확하게 출력되도록 수정해보겠다.