LCS
LCS(Longest Common Subsequence)๋ ์ต์ฅ ๊ณตํต ๋ถ๋ถ ๋ฌธ์์ด์ด๋ค.
์ฌ๊ธฐ์ Subsequence๋ ๋ถ๋ถ ์์ด์ผ๋ก ๋ฌธ์์ด์ด ์ฐ์์ ์ผ ํ์๋ ์๋ค๋ ๊ฒ์ด๋ค.
์ฆ, ๋ ๋ฌธ์์ด์ ๋น๊ตํ ๋ ๊ณตํต ๋ถ๋ถ ์์ด ์ค ๊ธธ์ด๊ฐ ๊ฐ์ฅ ๊ธด ๋ถ๋ถ ์์ด์ ์๋ฏธํ๋ค.
์์๋ก "ACAYKP", "CAPCAK"๋ฅผ ๋ณด๋ฉด ๋ ๋ฌธ์์ LCS๋ ACAK
๋ค.
์ด ๋ต์ ์ด๋ป๊ฒ ๊ตฌํ ์ ์์๊น?
ํด๊ฒฐ์ DP๋ฅผ ์ด์ฉํด ํด๊ฒฐํ๋ค. ๋จผ์ DP๋ฅผ ์ด์ฉํ ํ ์ด๋ธ์ ๋จผ์ ๋ด๋ณด์.
0
0
0
0
0
0
0
A
0
0
1
1
1
1
1
C
0
1
1
1
2
2
2
A
0
1
2
2
2
3
3
Y
0
1
2
2
2
3
3
K
0
1
2
2
2
3
4
P
0
1
2
3
3
3
4
์ฌ๊ธฐ์ DP[3][5]๋ ACAYKP์ 3๋ฒ์งธ ๋ฌธ์ A
, CAPCAK์ 5๋ฒ์งธ ๋ฌธ์ A
๊น์ง ๋น๊ตํ๋ค. DP[3]์ ์์๋ก ๋ค์ด๋ณด์.
DP[3][0]๋ถํฐ DP[3][6]๊น์ง ๊ฐ๋ฉด์ ๋น๊ต๋ฅผ ํ๊ฒ๋๋ค. ๋ง์ฝ ๋น๊ตํ๊ฒ ๋๋ ๋ฌธ์๊ฐ ๊ฐ์ง ์๋ค๋ฉด, ๊ฐ ๋ฌธ์๋ฅผ ๊ณ ๋ คํ๊ธฐ ์ ์ ์ต๋๊ฐ์ผ๋ก ๋ฐ์ํ๋ค.
DP[i][j] = max(DP[i-1][j], DP[i][j-1]
์๋ํ๋ฉด ๋ฌธ์๊ฐ ๊ฐ์ง ์๋ค๋ฉด, ํ์ฌ ์๋ ๋ถ๋ถ ์์ด์์ ๊ฐ์ฅ ํฐ ๊ฐ์ ๊ทธ๋๋ก ๋ฐ๊ธฐ ๋๋ฌธ์ด๋ค.
์ฌ๊ธฐ์ ๊ฐ ๋ฌธ์๋ผ๋ ๊ฒ์ ๋ ๋ฌธ์์ด์ ๋น๊ต๋๋ ๋ฌธ์์ด๋ค. DP[3][5]๋ผ๋ฉด ACAYKP
์ A
์ CAPCAK
์ A
๋ฅผ ๋งํ๋ค.
DP[3][5]์ฒ๋ผ ๋น๊ต๋๋ ๋ฌธ์๊ฐ ๊ฐ๋ค๋ฉด, DP[i][j] = DP[i-1][j-1] + 1
์ด๋ค. ๋ ๋ฌธ์๊ฐ ๊ฐ๊ธฐ ๋๋ฌธ์ ๋ ๋ฌธ์๋ฅผ ๋น๊ตํ๊ธฐ ์ ์ต๋๊ฐ์ +1์ ํด์ฃผ๋ ๊ฒ์ด๋ค.
Last updated