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 |