처음엔 좀 이해하기 어려웠다.
KMP를 이해하고 나면 그래도 좀 편하다
KMP의 P배열의 특성을 생각하면 prefix와 suffix가 같을 때 해당부분은 반복된 것이고 나머지가 전광판 길이상 나오지 않은 부분이라고 추측할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <stdio.h> #include <iostream> #define mv 1000002 char p[mv]; int f[mv], m; int main() { scanf("%d\n", &m); fgets(p, mv, stdin); for (int i = 1, j = 0; i < m; i++) { while (j && p[i] != p[j]) j = f[j - 1]; if (p[i] == p[j]) f[i] = ++j; } printf("%d\n", m - f[m - 1]); return 0; } | cs |
'BOJ' 카테고리의 다른 글
11585 속타는 저녁 메뉴 (0) | 2018.02.18 |
---|---|
4354 문자열 제곱 (0) | 2018.02.18 |
1786 찾기 (0) | 2018.02.18 |
5670 휴대폰 자판 (0) | 2018.02.18 |
5052 전화번호 목록 (0) | 2018.02.18 |