https://www.acmicpc.net/problem/1305
1305번: 광고
세준이는 길 한가운데에서 전광판을 쳐다보고 있었다. 전광판에는 광고가 흘러나오고 있었다. 한참을 전광판을 쳐다본 세준이는 이 광고가 의미하는 것이 무엇인지 궁금해지기 시작했다. 전광
www.acmicpc.net
'''
1305번: 광고 / platinum 4 / KMP
'''
# 광고판의 길이 L, 광고판 문자열 board 입력 받기
L = int(input())
board = input()
# pi 리스트 만들기
pi = [0 for _ in range(L)]
j = 0
for i in range(1, L):
while j > 0 and board[i] != board[j]:
j = pi[j - 1]
if board[i] == board[j]:
j += 1
pi[i] = j
# 실제 광고 길이 출력하기
print(L - pi[-1])
코드 리뷰
- KMP 알고리즘을 더 풀고싶어 해당 문제를 선택 했습니다! (알고리즘 알고 문제 접근)
- 해당 문제를 요약하자면, 실제 광고 문자열이 될 수 있는 길이의 최솟값 구하는 문제입니다!
- 즉, '세준이가 순간 본 광고판의 문자열' 을 보고, '실제 광고 문자열'의 길이를 추측해야 합니다.
- '세준이가 순간 본 광고판의 문자열'에는 '실제 광고 문자열'이 존재합니다.
- https://ronlee.tistory.com/200 어제 풀은 해당 문제를 활용해 생각해보면,
- '세준이가 순간 본 광고판의 문자열'이 '실제 광고 문자열'을 계속 붙인 것이므로
- '세준이가 순간 본 광고판의 문자열'에서 접두사와 접미사가 같은 최대 길이가 '실제 광고 문자열'의 최소 길이
'백준 문제풀이' 카테고리의 다른 글
1520번: 내리막 길 / gold 3 / DP, DFS (0) | 2023.04.18 |
---|---|
1946번: 신입 사원 / silver 1 / 그리디, 정렬 (0) | 2023.04.16 |
4354번: 문자열 제곱 / platinum 5 / KMP (0) | 2023.04.14 |
1786번: 찾기 / platinum 5 / KMP (0) | 2023.04.13 |
11048번: 이동하기 / silver 2 / DP (0) | 2023.04.12 |