티스토리 뷰
14959번: Slot Machines - KMP
N개의 수들이 주어질 때, 이 수열은 처음 K개의 원소를 제외하고 주기 P를 갖는다.
이 때, K+P가 최소가 되는, 같다면 P가 최소가 되는 K와 P를 출력하는 문제이다.
주기를 찾는 문제는 KMP에서 광고문제로 설명한 적이 있다.
문자열을 이루고 있는 최소의 주기를 구하는 방법은 문자열의 길이가 S일 때, S - pi[S-1]이다.
이를 이용하려면 먼저 pi배열을 구하여야 한다.
pi[i] = N[...i]의 접미사도 되고 접두사도 되는 문자열의 최대 길이로
주기가 시작되는 부분을 알 수 없으므로 모든 N에 대하여 확인해봐야하므로 시간복잡도가 O(N^2)이다.
그러나 여기서 N개의 수를 뒤집어서 생각한다면 주기의 시작부분은 처음부터가 되게 되며
단 한번의 pi배열을 구하는 과정을 통하여 값을 간단하게 구할 수 있다.
K는 N-(i+1), P는 i+1-p[i]이 되며 이들 중 최소값을 구하여 출력하면 풀 수 있는 문제이다.
'문제 해결 > 백준 온라인 저지' 카테고리의 다른 글
1017번: 소수 쌍 (0) | 2018.09.26 |
---|---|
14961번: Untangling Chain (0) | 2018.09.09 |
14955번: How Many to Be Happy? (0) | 2018.09.09 |
13560번: 축구게임 (0) | 2018.09.09 |
1222번: 홍준 프로그래밍 대회 (1) | 2018.08.24 |
댓글