
https://www.acmicpc.net/problem/9251
๋ฌธ์
LCS(Longest Common Subsequence, ์ต์ฅ ๊ณตํต ๋ถ๋ถ ์์ด)๋ฌธ์ ๋ ๋ ์์ด์ด ์ฃผ์ด์ก์ ๋, ๋ชจ๋์ ๋ถ๋ถ ์์ด์ด ๋๋ ์์ด ์ค ๊ฐ์ฅ ๊ธด ๊ฒ์ ์ฐพ๋ ๋ฌธ์ ์ด๋ค.
์๋ฅผ ๋ค์ด, ACAYKP์ CAPCAK์ LCS๋ ACAK๊ฐ ๋๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค๊ณผ ๋์งธ ์ค์ ๋ ๋ฌธ์์ด์ด ์ฃผ์ด์ง๋ค. ๋ฌธ์์ด์ ์ํ๋ฒณ ๋๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ์ต๋ 1000๊ธ์๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ๋ ๋ฌธ์์ด์ LCS์ ๊ธธ์ด๋ฅผ ์ถ๋ ฅํ๋ค.
์์

์ฝ๋
import sys
input = sys.stdin.readline
W1 = input().strip()
W2 = input().strip()
dp = [0]*1000 # LCS ๊ธธ์ด ์ ์ฅ
for i in range(len(W1)):
mx = 0
for j in range(len(W2)):
if mx < dp[j]: # ํ์ฌ๊น์ง์ ์ต๋ ๊ธธ์ด๋ก ๊ฐฑ์
mx = dp[j]
elif W1[i] == W2[j]:
dp[j] = mx + 1 # LCS ๊ธธ์ด + 1
print(max(dp))
mx๋ ํ์ฌ๊น์ง์ ์ต๋ ๊ธธ์ด๋ก ๊ณ์ํด์ ๊ฐฑ์ ํด์ค๋ค.
๊ฐ์ ๋ถ๋ถ ๋ฌธ์์ด์ ๋ฐ๊ฒฌํ๋ฉด, LCS ๊ธธ์ด๋ฅผ +1 ํด์ค๋ค.
์ต์ข ์ ์ผ๋ก ์ ์ฅ๋ LCS ๊ธธ์ด์ ์ต๋๊ฐ์ ์ถ๋ ฅํ๋ค.
๋๋ ์ & ๋ฐฐ์ด ์
dp๋ฌธ์ ์ ๊ต์ฅํ ์ฝํ๋ค๋ ๊ฒ์ ์๊ฒ ๋ ๋ฌธ์ .. ๋ต์ ๋ณด๊ณ ๋๋ฉด ์ ๋ง ๊ฐ๋จํ ๋ฐ ๋ ์ฌ๋ฆฌ๊ธฐ๊ฐ ์ด๋ ค์ด ๊ฒ ๊ฐ๋คใ
์์ง ๋ง์ ์ฐ์ต์ด ํ์ํ ๊ฒ ๊ฐ๋ค!