ํฐ์คํ ๋ฆฌ ๋ทฐ
728x90
๋ฐ์ํ
๋ฌธ์
๋ฌธ์ ํ์ด
๋ฌธ์์ด๊ณผ ํจํด์ด ์ฃผ์ด์ง๋ฉด, ์ด๋ฅผ ํตํด ๋ช ๊ฐ๊ฐ ์ผ์นํ๊ณ ์ด๋ ์์น์ ์ผ์นํ๋์ง ๋ฐํํ๋ ๋ฌธ์ ์ด๋ค. ์์ ๋ค๋ฃฌ 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)
728x90
๋ฐ์ํ
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 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 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ