๋ฌธ์
ํ์ด
ACAYKP์ A์ CAPCAK์ C, CA, CAP, CAPC, CAPCAK ๋ถ๋ถ ์์ด์ LCS๋ฅผ ๊ตฌํ ๋ค 2์ฐจ์ ๋ฐฐ์ด์ ์ ์ฅ.
(0, 0) : A, C์ LCS ๊ฐ(0) ์ ์ฅ / (1, 0) : A, CA ์ LCS ๊ฐ(1) ์ ์ฅ / (2, 0) : A, CAP ์ LCS ๊ฐ(1) ์ ์ฅ
ACAYKP์ AC, CAPCAK์ C, CA, CAP, CAPC, CAPCAK ๋ถ๋ถ ์์ด์ LCS๋ฅผ ๊ตฌํ ๋ค 2์ฐจ์ ๋ฐฐ์ด์ ์ ์ฅ.
(0, 1) : AC, C ์ LCS ๊ฐ(1) ์ ์ฅ / (1, 1) : AC, CA ์ LCS ๊ฐ(1) ์ ์ฅ / (2, 1) : AC, CAP ์ LCS ๊ฐ(1) ์ ์ฅ
์ ๊ณผ์ ์ ๋ฐ๋ณต
๊ทธ๋ฆผ์์ ๋นจ๊ฐ์ ๊ธ์๋ ์ต์ฅ ๋ถ๋ถ ์์ด
๊ฒ์์ ๊ธ์๋ ์ต์ฅ ๋ถ๋ถ ์์ด์ ๊ธธ์ด
ํ๋์ ๊ธ์๋ LCS๋ฅผ ๊ตฌํ๊ธฐ ์ํ ๋ ๋ถ๋ถ ์์ด์ ์๋ฏธํจ
๋ฌธ์์ด X์ i๋ฒ์งธ ๋ฌธ์์, ๋ฌธ์์ด Y์ j๋ฒ์งธ ๋ฌธ์๊ฐ ์๋ก ๊ฐ์ ๊ฒฝ์ฐ (X[i] == Y[j])
X[i], Y[j]๋ฅผ ํฌํจํ๊ธฐ ์ ์ LCS์ 1์ ๋ํ ๊ฐ๊ณผ ๊ฐ๋ค.
์ ๊ทธ๋ฆผ์์ ๋ฌธ์์ด X = AC, ๋ฌธ์์ด Y = CAPC ์ผ ๋
X[1] == Y[3] ์ด๋ฏ๋ก ์ด๋์ LCS๋ C๋ฅผ ํฌํจํ๊ธฐ ์ ์ LCS๊ฐ์ธ A์ C๋ฅผ ์ถ๊ฐํ ๊ฒ (๊ทธ๋ฆผ์ ์ขํ(2, 0) ์ฐธ๊ณ )
๋ฐ๋ผ์ X = AC, Y = CAPC ์ผ ๋์ LCS๋ AC๊ฐ ๋๋ค.
๋ฌธ์์ด X์ i๋ฒ์งธ ๋ฌธ์์, ๋ฌธ์์ด Y์ j๋ฒ์งธ ๋ฌธ์๊ฐ ์๋ก ๋ค๋ฅธ ๊ฒฝ์ฐ (X[i] != Y[j])
์ ๊ทธ๋ฆผ์์ ๋ฌธ์์ด X = ACAYKP, ๋ฌธ์์ด Y = CAPCAK ์ผ ๋
X[5] != Y[5] ์ด๋ฏ๋ก ์ด๋์ LCS๋
P๋ฅผ ํฌํจํ์ง ์์ ACAYK์ CAPCAK์ LCS
ACAYKP์ K๋ฅผ ํฌํจํ์ง ์์ CAPCA์ LCS ์ค ํฐ ๊ฐ์ด ๋๋ค.
์ ํ์
LCS(Xi, Yj) = LCS(Xi - 1, Yj - 1)
LCS(Xi, Yj) = max(LCS(Xi - 1, Yj), LCS(Xi, Yj - 1))
์ฝ๋
str1 = " " + input()
str2 = " " + input()
dp = [[0] * (len(str1)) for _ in range(len(str2))]
for i in range(1, len(str2)):
for j in range(1, len(str1)):
if str2[i] == str1[j]:
dp[i][j] = 1 + dp[i - 1][j - 1]
else:
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1])
print(dp[-1][-1])
๋ง๋ฌด๋ฆฌ
DP๋ ์๋ฌด๋ฆฌ ํ๊ณ ํ์ด๋ ๋๋ฌด ์ด๋ ต๋ค...
ํ์ด๋ณธ ์ ํ์ด๋ผ๋ฉด ์ฝ๊ฒ ํ๋ฆฌ๋ ๊ฒฝ์ฐ๊ฐ ์์ง๋ง 9251 ๋ฌธ์ ์ ๊ฐ์ ๊ฒฝ์ฐ ๋น์ทํ ์ ํ์ด ๋์๋ ํ ์์ ์ด ์๋ค...
์ฌ๋ฌ ๋ธ๋ก๊ฑฐ๋ถ๋ค์ ํด์ค์ ๋ณด๊ณ ๋ฌธ์ ์ดํด๋ ํ์์ง๋ง... ํผ์์๋ ๋์ ํ ๋ชป ํ์์ ๊ฒ์ด๋ค...