ps:problems:boj:1305
광고
ps | |
---|---|
링크 | acmicpc.net/… |
출처 | BOJ |
문제 번호 | 1305 |
문제명 | 광고 |
레벨 | 플래티넘 4 |
분류 |
문자열 |
시간복잡도 | O(n) |
인풋사이즈 | n<=1,000,000 |
사용한 언어 | Python 3.11 |
제출기록 | 71988KB / 264ms |
최고기록 | 216ms |
해결날짜 | 2022/12/16 |
풀이
- 문자열의 가장 짧은 반복 패턴을 찾으면 되는 문제이다. S= S[:l]*n+S[:m] 으로 표현할때의 가장 짧은 l.
- 전광판이 어쩌고하는 복잡해보이는 설정은, 문자열이 완전히 반복된 형태가 아니라도 된다는, 즉 위의 표현에서 m이 0이 아니라도 된다는 의미이다.. 결국 풀이를 더 쉽게 해주기 위해서 추가된 제한이다.
- 링크에서 설명한것과 같이, fail 함수를 O(n)에 구한 뒤에, l=N-fail[N-1] 로 계산할수 있다.
코드
"""Solution code for "BOJ 1305. 광고".
- Problem link: https://www.acmicpc.net/problem/1305
- Solution link: http://www.teferi.net/ps/problems/boj/1305
Tags: [KMP]
"""
from teflib import string as tstring
def main():
L = int(input())
s = input()
fail = tstring.failure_table(s)
print(L - fail[-1])
if __name__ == '__main__':
main()
- Dependency: teflib.string.failure_table
ps/problems/boj/1305.txt · 마지막으로 수정됨: 2022/12/16 09:10 저자 teferi
토론