접근
KMP 알고리즘을 이용하여 KMP table 구할 수 있다. 이 table 의 가장 마지막 숫자를 확인하고, 문자열 전체 길이를 이 수로 나누었을 때 나누어 떨어지지 않으면 반복이 0회, 즉 답이 1이고, 나누어 떨어진다면 그 몫이 답이다.
코드
import sys
def kmptable(a):
n = len(a)
table = [0] * n
j = 0
for i in range(1, n):
while j > 0 and a[i] != a[j]:
j = table[j - 1]
if a[i] == a[j]:
j += 1
table[i] = j
return table
while 1:
p = sys.stdin.readline().rstrip()
if p == '.':
break
table = kmptable(p)
mod = len(p) - table[-1]
if len(p) % mod == 0:
print(len(p) // mod)
else:
print(1)
더 생각해 볼 것?
...
코드나 내용 관련 조언, 부족한 점 및 질문 언제든 환영합니다!
반응형
'코딩 > 백준 (Python)' 카테고리의 다른 글
백준 10266번: 시계 사진들 (Python) (0) | 2021.06.19 |
---|---|
백준 1305번: 광고 (Python) (0) | 2021.06.19 |
백준 1786번: 찾기 (Python) (0) | 2021.06.18 |
백준 2482번: 색상환 (Python) (0) | 2021.06.17 |
백준 17404번: RGB 거리 2 (Python) (0) | 2021.06.16 |
최근댓글