본문 바로가기
알고리즘/문자와 문자열

5555 반지

by tryotto 2020. 1. 4.
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
#include <stdio.h>
#include <string.h>
 
int isStr(char* ring, char* str) {
    int lenR = strlen(ring);
    int lenS = strlen(str);
 
    for (int i = 0; i < lenR; i++) {
        int j = 0, st = i;
        if (ring[st] == str[0]) {
            for (j = 1; j < lenS; j++) {
                if (st + j == lenR) {
                    st = -j;
                }
                if (ring[st + j] != str[j]) {
                    break;
                }
            }
        }
        if (j == lenS)
            return 1;
    }
    return 0;
}
 
int main() {
    char str[105= { 0 };
    scanf("%s"&str);
 
    int n;
    scanf("%d"&n);
 
    int sum = 0;
    while (n--) {
        char ring[105= { 0 };
        scanf("%s"&ring);
 
        sum += isStr(ring, str);
    }
    printf("%d", sum);
}
cs

KMP 알고리즘을 굳이 사용하지 않아도 해결 가능.

시간복잡도 N^2 였지만, input값이 작아서 시간 내 해결 가능.

끝부분을 다시 첫 부분으로 만드는 과정이 핵심.


'알고리즘 > 문자와 문자열' 카테고리의 다른 글

11586 지영 공주님의 마법 거울  (0) 2020.01.04
2804 크로스 만들기  (0) 2020.01.04
1919 애너그램 만들기  (0) 2020.01.04
2941 크로아티아 알파벳  (0) 2020.01.04
2902 KMP는 왜 KMP 일까?  (0) 2020.01.04