Python/백준

1305_광고

728x90

https://www.acmicpc.net/problem/1305

 

1305번: 광고

세준이는 길 한가운데에서 전광판을 쳐다보고 있었다. 전광판에는 광고가 흘러나오고 있었다. 한참을 전광판을 쳐다본 세준이는 이 광고가 의미하는 것이 무엇인지 궁금해지기 시작했다. 전광

www.acmicpc.net

 

 

역시 KMP알고리즘을 활용해 푸는 문제이다. 특히 KMP Table을 이용해서 풀 수있다.

 

예를들어서 

 

7

aabaaba라는 문자열이 있다고 생각하면 KMP Table을 구하면

 

[0, 1, 0, 1, 2, 3, 4]

가 나온다 즉, 광고판의 끝부분에서 보았을때 시작부터 4개의 지점이랑 겹친다는 의미이다.

 

그렇기 때문에 광고판의 개수에서 겹치는 개수를뺀

 

l - KMP_Table[-1]을 구하면 답을 구할 수 있다.

 

l = int(input())
str = input()
ls = len(str)
k = [0] *ls
j=0
for i in range(1,ls):
    while j>0 and str[i]!=str[j]:
        j= k[j-1]
    if str[i] == str[j]:
        j+=1
        k[i]=j
print(l-k[-1])
728x90

'Python > 백준' 카테고리의 다른 글

13460_구슬탈출 2  (0) 2022.06.18
14501_퇴사  (0) 2022.06.17
4354_문자열제곱  (0) 2022.06.12
1786_찾기  (0) 2022.06.11
11659_누적합  (0) 2022.06.10