백준 4354 - 문자열 제곱 (Python)
Updated:
KMP 알고리즘의 failure function을 사용하면 됩니다.
전체 코드
import sys
input = sys.stdin.readline
def make_table(P):
P_SIZE = len(P)
t = [0] * P_SIZE
j = 0
for i in range(1, P_SIZE):
while j > 0 and P[i] != P[j]:
j = t[j - 1]
if P[i] == P[j]:
j += 1
t[i] = j
return t[-1]
while True:
a = input().replace('\n', '')
if a == '.':
break
len_a = len(a)
len_match = len_a - make_table(a)
if len_a % len_match != 0:
print(1)
continue
print(len_a // len_match)