사용자 도구

사이트 도구


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()

토론

댓글을 입력하세요:
J L E W​ D
 
ps/problems/boj/1305.txt · 마지막으로 수정됨: 2022/12/16 09:10 저자 teferi