ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ฌธ์
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))
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 14426 ์ ๋์ฌ ์ฐพ๊ธฐ (0) | 2020.10.27 |
---|---|
๋ฐฑ์ค: 14425 ๋ฌธ์์ด ์งํฉ (0) | 2020.10.27 |
๋ฐฑ์ค: 1701 Cubeditor (0) | 2020.10.22 |
๋ฐฑ์ค: 1786 ์ฐพ๊ธฐ (0) | 2020.10.22 |
๋ฐฑ์ค: 1717 ์งํฉ์ ํํ (0) | 2020.10.20 |