๐น ๊ณตํต ๋ถ๋ถ ๋ฌธ์์ด
1. ๋ฌธ์ ๋งํฌ
2. ์ฝ๋
Python3 31120KB 2592ms
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
str1 = input()
str2 = input()
# str1์ด ๋ ์งง๋๋ก ์์
if len(str1) > len(str2):
str1, str2 = str2, str1
length = len(str1)
dp = [0] * (length)
for idx in range(length):
# ํ์ฌ๊น์ง ์ฐพ์ ์ต๋ ๋ฌธ์์ด ๊ธธ์ด๋ถํฐ ํ์
start = max(dp)
for l in range(start, length + 1):
# str1์ ๋ฒ์๋ฅผ ๋์ด๊ฐ๋ฉด break
if idx + l > length:
break
t = str1[idx:idx+l]
# ๋ถ๋ถ ๋ฌธ์์ด์ด ๋ค๋ฅธ ๋ฌธ์์ด์ ํฌํจ๋์ด ์์ ๋
if t in str2:
dp[idx] = max(dp[idx], l)
else:
break
print(max(dp))
3. ํด์ค
dp[idx]๋ ๋ฌธ์์ด ์์์ ์ธ๋ฑ์ค(idx)๋ถํฐ์ ๋ถ๋ถ ๋ฌธ์์ด์ผ ๋ ๊ฐ๋ฅํ ๊ณตํต ๋ฌธ์์ด์ ์ต๋ ๊ธธ์ด์ด๋ค.
๋ ๋ฌธ์์ด ์ค ๋ ์งง์ ๋ฌธ์์ด ๊ฐ ์ธ๋ฑ์ค๋ฅผ ํ์ํ๋ค. idx๋ถํฐ idx+l(๋ถ๋ถ ๋ฌธ์์ด ๊ธธ์ด)์ ํฌํจ๋ ๋ถ๋ถ ๋ฌธ์์ด์ด ๋ค๋ฅธ ๋ฌธ์์ด์ ํฌํจ๋๋์ง ํ์ธํ ํ ํฌํจ๋ ๊ฒฝ์ฐ์๋ dp๋ฅผ l์ ๊ฐ์ผ๋ก ์ด๊ธฐํํด์ค๋ค.
idx+l์ด ์งง์ ๋ฌธ์์ด ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฉด ๋ค์ ์์น๋ฅผ ํ์ํ๋ค. ์ด๋ ํ์ฌ๊น์ง์ ๊ณตํต ๋ถ๋ถ ๋ฌธ์์ด์ ์ต๋ ๊ธธ์ด๋ถํฐ ํ์ํ๋ค.(์ต๋๊ฐ์ ์ฐพ๋ ๊ฒ์ด๋ผ ๊ตณ์ด ์์ ๊ฒฝ์ฐ๋ฅผ ํ์ํ ํ์๊ฐ ์๋ค.)
This post is licensed under CC BY 4.0 by the author.