ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

 

1305๋ฒˆ: ๊ด‘๊ณ 

์ฒซ์งธ ์ค„์— ๊ด‘๊ณ ํŒ์˜ ํฌ๊ธฐ L์ด ์ฃผ์–ด์ง€๊ณ , ๋‘˜์งธ ์ค„์— ํ˜„์žฌ ๊ด‘๊ณ ํŒ์— ๋ณด์ด๋Š” ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์ง„๋‹ค. L์€ ๋ฐฑ๋งŒ๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค.

www.acmicpc.net

 

๋ฌธ์ œ ํ’€์ด

  ์ „๊ด‘ํŒ์— N๊ฐœ์˜ ๋ฌธ์ž์—ด์„ ๊ด‘๊ณ ๋ฅผ ํ‘œ์‹œํ•œ๋‹ค. ์ด๋•Œ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๋ฌธ์ž์—ด์€ ํ•œ ์นธ์”ฉ ์˜†์œผ๋กœ ์ด๋™ํ•œ๋‹ค. ์–ด๋Š ์ˆœ๊ฐ„ ๊ด‘๊ณ ํŒ์„ ๋ณผ ๋•Œ, ์“ฐ์—ฌ ์žˆ๋Š” ๋ฌธ์ž๊ฐ€ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค๋ฉด ๊ฐ€๋Šฅํ•œ ๊ด‘๊ณ ์˜ ๊ธธ์ด ์ค‘ ๊ฐ€์žฅ ์งง์€ ๊ฒƒ์„ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ์ด๋Š” `KMP ์•Œ๊ณ ๋ฆฌ์ฆ˜`์—์„œ ์ ‘๋ฏธ์‚ฌ์™€ ์ ‘๋‘์‚ฌ๊ฐ€ ๋˜๋Š” ๋ฌธ์ž์—ด์˜ ์ตœ๋Œ€ ๊ธธ์ด๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ด๋‹ค. ๋งŒ์•ฝ `KMP ์•Œ๊ณ ๋ฆฌ์ฆ˜`์— ๋Œ€ํ•ด ์ดํ•ดํ•˜๊ณ  ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์—†๋‹ค.

 

์ฝ”๋“œ

def make_table(patten):
    table = [0] * l
    j = 0
    for i in range(1, l):
        while j > 0 and patten[i] != patten[j]:
            j = table[j - 1]
        if patten[i] == patten[j]:
            j += 1
            table[i] = j
    return l - table[l - 1]


if __name__ == "__main__":
    l = int(input())
    s = input()
    print(make_table(s))

 

728x90
๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๊ธ€ ๋ณด๊ด€ํ•จ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€