320x100
문제 : https://www.acmicpc.net/problem/11585
두번째 문장을 2개 이어붙인 문자열에서 세번째 문장이 몇 번 나오는지 찾는다.
이를 KMP로 찾을 수 있다.
주의할 점은 입력값이 ABCDE, ABCDE인 경우 정답은 1/5 이지만 2/5 가 출력된다.
두번째 문장을 2개 이어붙였기 때문에 ABCDEABCDE에서 실제로는 1개지만 빨, 파 2 번 나타났다고 판단했기 때문이다.
따라서 패턴문자열을 찾았을 때 첫번째 문자열을 시작으로 하는 부분문자열에서 패턴이 나타났다면 1을 빼준다.
KMP로 구한 패턴문자열이 나타낸 횟수가 분자, 문자열 길이(N)가 분모가 된다.
기약분수는 최대공약수를 유클리드로 구해서 분자, 분모에 나눠주면 된다.
시간복잡도는 O(N).
알고리즘 머리에 저장하려고 KMP 도장깨기 중. 반복만이 살길이다.
320x100
'알고리즘 문제 > BOJ' 카테고리의 다른 글
[BOJ][15686] 치킨 배달 (0) | 2020.10.20 |
---|---|
[BOJ][2143] 두 배열의 합 (0) | 2020.07.08 |
[BOJ][2003] 수들의 합 2 (0) | 2019.02.16 |
[BOJ][1504] 특정한 최단 경로 (0) | 2019.01.27 |
[BOJ][1516] 게임 개발 (0) | 2019.01.20 |
댓글