반복
시간 제한6초메모리 제한512 MB
길이 n인 이진 문자열에서 어떤 씨앗 문자열을 최대한 많이 반복한 부분 문자열을 찾아 반복 횟수, 씨앗 길이, 1부터 세는 시작 위치를 출력한다.
문제
문자열 가 -반복이라는 것은, 길이 인 어떤 씨앗 문자열 를 번 이어 붙여 를 얻을 수 있다는 뜻이다. 예를 들어 문자열
s = abaabaabaaba
는 씨앗 문자열
t = aba
를 가진 -반복이다. 즉 씨앗 문자열 의 길이는 3이고, 전체 문자열 는 를 4번 반복해 얻는다.
다음 작업을 수행하는 프로그램을 작성하라. 입력으로 ‘a’와 ‘b’로만 이루어진 긴 문자열 가 주어진다. 프로그램은 의 부분 문자열로 등장하는 -반복 중에서 가 최대인 것을 찾아야 한다. 예를 들어 입력 문자열
u = babbabaabaabaabab
에는 5번 위치에서 시작하는 -반복 가 있다. 에 4번보다 더 많이 반복되는 연속 부분 문자열이 없으므로, 프로그램은 이 부분 문자열을 출력해야 한다.
입력
첫째 줄에 입력 문자열의 길이 이 주어진다 ().
다음 개 줄에 입력 문자열이 한 줄에 한 문자씩 (‘a’ 또는 ‘b’) 순서대로 주어진다.
출력
출력은 세 정수로 이루어지며, 각각을 한 줄에 출력한다. 이 정수들은 프로그램이 찾은 -반복을 다음과 같이 나타낸다.
- 첫째 줄에는 최대화한 반복 횟수 를 출력한다.
- 둘째 줄에는 번 반복되는 씨앗 문자열의 길이 을 출력한다.
- 셋째 줄에는 -반복이 시작하는 위치 를 출력한다 ().
주어진 입력에 대해 가 같은 답이 여러 개라면 그중 아무거나 출력해도 된다.
힌트
입력 문자열의 5번째 문자(입력의 6번째 줄)에서 시작하는 -반복이 존재한다.