ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ฌธ์
1786๋ฒ: ์ฐพ๊ธฐ
์ฒซ์งธ ์ค์, T ์ค๊ฐ์ P๊ฐ ๋ช ๋ฒ ๋ํ๋๋์ง๋ฅผ ๋ํ๋ด๋ ์์ด ์๋ ์ ์๋ฅผ ์ถ๋ ฅํ๋ค. ๋์งธ ์ค์๋ P๊ฐ ๋ํ๋๋ ์์น๋ฅผ ์ฐจ๋ก๋๋ก ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํด ์ถ๋ ฅํ๋ค. ์์ปจ๋, T์ i๏ฝi+m-1๋ฒ ๋ฌธ์์ P์ 1๏ฝm
www.acmicpc.net
๋ฌธ์ ํ์ด
๋ฌธ์์ด๊ณผ ํจํด์ด ์ฃผ์ด์ง๋ฉด, ์ด๋ฅผ ํตํด ๋ช ๊ฐ๊ฐ ์ผ์นํ๊ณ ์ด๋ ์์น์ ์ผ์นํ๋์ง ๋ฐํํ๋ ๋ฌธ์ ์ด๋ค. ์์ ๋ค๋ฃฌ 16916 ๋ถ๋ถ ๋ฌธ์์ด๊ณผ ๊ฐ์ด `KMP ์๊ณ ๋ฆฌ์ฆ`์ ์ดํดํ๊ณ ์์ผ๋ฉด ์ฝ๊ฒ ํด๊ฒฐํ ์ ์๋ ๋ฌธ์ ์ด๋ค. ์์ ๋ค๋ฃฌ ๋ฌธ์ ์ ๋ค๋ฅธ ์ ์ด ์๋ค๋ฉด ํจํด๊ณผ ์ผ์นํ๋ ๊ฒฝ์ฐ ๋ฐ๋ก ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ์ง ์๊ณ , ๊ฐ์ ์ถ๊ฐํ์ฌ ๋ชจ๋ ํ์์ด ๋๋ ํ์ ๋ฐํํ๋ ๋ถ๋ถ์ ์์ ํ๋ฉด ๋๋ค.
์ฝ๋
def make_table():
length = len(p)
table = [0] * len(p)
j = 0
for i in range(1, length):
while j > 0 and p[i] != p[j]:
j = table[j - 1]
if p[i] == p[j]:
j += 1
table[i] = j
return table
def kmp():
table = make_table()
j = 0
ret = []
for i in range(len(s)):
while j > 0 and s[i] != p[j]:
j = table[j - 1]
if s[i] == p[j]:
if j == len(p) - 1:
ret.append(i - len(p) + 2)
j = table[j]
else:
j += 1
return ret
if __name__ == "__main__":
s = input()
p = input()
result = kmp()
print(len(result))
print(*result)
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 1305 ๊ด๊ณ (0) | 2020.10.27 |
---|---|
๋ฐฑ์ค: 1701 Cubeditor (0) | 2020.10.22 |
๋ฐฑ์ค: 1717 ์งํฉ์ ํํ (0) | 2020.10.20 |
๋ฐฑ์ค: 16916 ๋ถ๋ถ ๋ฌธ์์ด (0) | 2020.10.19 |
๋ฐฑ์ค: 6087 ๋ ์ด์ ํต์ (0) | 2020.10.18 |