ํฐ์คํ ๋ฆฌ ๋ทฐ
728x90
๋ฐ์ํ
๋ฌธ์
๋ฌธ์ ํ์ด
๋ฌธ์์ด S, P๊ฐ ์ฃผ์ด์ง ๋ P๊ฐ S์ ๋ถ๋ถ ๋ฌธ์์ด์ธ์ง ํ๋จํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๋ฌธ์ ์ด๋ค. ๋ ๋ฌธ์์ด์ ๊ธธ์ด๋ 100๋ง ๋ฏธ๋ง์ด๋ฏ๋ก ๋จ์ํ `print(int(p in s))`์ ๊ฐ์ด ํ๊ฒ ๋๋ฉด ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค. ๋ฐ๋ผ์ `KMP ์๊ณ ๋ฆฌ์ฆ`์ ํ์ฉํ์ฌ ํ์ ์๋ ๊ณณ์ ํ์์ ๊ฑด๋๋ฐ๋๋ก ํ์ฌ์ผ ์๊ฐ ๋ด์ ํต๊ณผํ ์ ์๋ค. ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด์๋ `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
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:
return True
else:
j += 1
return False
if __name__ == "__main__":
s = input()
p = input()
print(1 if kmp() else 0)
728x90
๋ฐ์ํ
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 1786 ์ฐพ๊ธฐ (0) | 2020.10.22 |
---|---|
๋ฐฑ์ค: 1717 ์งํฉ์ ํํ (0) | 2020.10.20 |
๋ฐฑ์ค: 6087 ๋ ์ด์ ํต์ (0) | 2020.10.18 |
๋ฐฑ์ค: 16234 ์ธ๊ตฌ ์ด๋ (0) | 2020.10.17 |
๋ฐฑ์ค: 17143 ๋์์ (0) | 2020.10.15 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ