๐ค๋ฌธ์ ํด๊ฒฐ
G5 | ๋ค์ด๋๋ฏนํ๋ก๊ทธ๋๋ฐ, ๋ฌธ์์ด
LCS๋ ์ต์ฅ ๊ณตํต ๋ถ๋ถ ๋ฌธ์์ด(Longest Common Subsequence)์ด๋ค.
์์๋ ๋ง์ง๋ง ์ฐ์ํ์ง ์์๋ ๋๋ ๊ฐ์ ๋ฌธ์์ด์ ์ฐพ๋ ๊ฒ์ด๋ค.
์๋ฅผ ๋ค์ด ABCAB์ BDCB๊ฐ ์๋ค. ABCAB ์ BDCB ์ LCS๋ BCB์ด๋ค.
LCS๊ฐ ๋ญ์ง ์๋ค๊ณ ํด๋ ์ฒ์ ์ ํ๋ฉด ๊ตฌํ๋๊ฑด ๋น์ฐํ ์ด๋ ต๋ค. ์์ ํ์์ ํ๋ ค๊ณ ํ์ง๋ง ์ญ์๋ ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค.
๋ฌธ์ ํด๊ฒฐ๋ฒ์ด DP์ด๊ณ ๋ค๋ฅธ ๊ณ ์๋ค์ ํ์ด๋ฐฉ๋ฒ์ ์ฐธ๊ณ ํด์ ํด๊ฒฐํ๋ค.
๋จผ์ ์์ ๊ฐ์ด DP๋ฅผ ๊ตฌ์ฑํ๋ค.
๋จผ์ 1๋ฒ ์งธ ํ์ ์ฑ์๋ณด๋ฉด
- AC์ C๊ฐ ๋ง๋์ LCS๋ 1์ด๋ค.
๋๋ฒ ์งธ ํ์ ๋ณด์.
- A์ CA๊ฐ ๋ง๋์ LCS๋ 1์ด๋ค.
- ACA์ CA๊ฐ ๋ง๋์ LCS๋ 2์ด๋ค.
์ธ๋ฒ ์งธ ํ์ ๋ณด์.
- A์ CAP = 1
- ACA์ CAP = 2
- ACAYKP์ CAP = 3
์ฌ๊ธฐ์ ๋๊ฐ์ง ๊ท์น์ ํ์ธํด์ผ ํ๋ค.
- ๋ฌธ์๊ฐ ๊ฐ์ ๊ฒฝ์ฐ: ์ด์ ๋ฌธ์๊น์ง์ LCS + 1
EX) ACAYKP์ CAP๋ฅผ ๋ดค์ ๋ P๊ฐ ๊ฐ์ ๋ฌธ์์ด๋ค.
๊ทธ๋ ๋ค๋ฉด ACAYK ์ CA ์ LCS ๋ 2์ด๊ณ +1์ ํด์ฃผ๊ฒ ๋๋ฉด
ACAYKP์ CAP ์ LCS ๋ 3์ด ๋๋ค. - ๋ฌธ์๊ฐ ๋ค๋ฅผ ๊ฒฝ์ฐ: ๋ ๋จ์ด์์ ๊ฐ๊ฐ์ ์ด์ ๋จ๊ณ์ LCS ์ค ํฐ ๊ฐ
EX) ACA์ CAP ์์ A ์ P๊ฐ ๋ค๋ฅด๋ฏ๋ก ์ด์ ์ ๊ฐ LCS
1. AC์ CAP = 1
2. ACA์ CA = 2
์ด ๋ ์ค max๊ฐ์ ๋ฃ๋๋ค.
์ด๋ ๊ฒ ๋ง์ง๋ง๊น์ง ๊ฐ๊ฒ ๋๋ค๋ฉด ์๋์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ค. dp์ ๋ง์ง๋ง ๊ฐ์ ์ถ๋ ฅํ๋ฉด ๋๋ค.
๐จ !์ฌํ ํ์ต : ์ด์ LCS์ ๊ตฌ์ฑ ๋ฌธ์๋ฅผ ๊ตฌํด๋ณด์.
DP์ ๊ฐ์ฅ ์๋์์ ๋ถํฐ ๊ฐ ํ์ ๊ฐ์ฅ ํฐ๊ฐ์ค ์์ชฝ์ ์๋ ๊ฐ์ ์ ํํด์ค๋ค.
( ํ์ง๋ง ๊ฐ ํ๊ณผ ์ด์ ํ๋์ ๊ฐ๋ง ์กด์ฌํด์ผ ํ๋ค.
์ด๋ ๊ฒ ์ฐ๋ฆฌ๋ ACAK๋ฅผ ์ป์ ์ ์๋ค.
๐ป์์ค ์ฝ๋
def solution(a, b):
a = ' ' + a
b = ' ' + b
an = len(a)
bn = len(b)
dp = [[0]*an for _ in range(bn)]
for i in range(1, bn):
for j in range(1, an):
if b[i] == a[j]:
dp[i][j] = dp[i-1][j-1] + 1
else:
dp[i][j] = max(dp[i-1][j], dp[i][j-1])
for row in dp:
print(row)
print()
print(dp[-1][-1])
return
if __name__ == "__main__":
a0 = input()
b0 = input()
solution(a0, b0)
๐๋ฌธ์ ํ์ธ
์ถ์ฒ: BACKJOON ONLINE JUDGE
๋งํฌ: https://www.acmicpc.net/problem/9251
๋ฌธ์
LCS(Longest Common Subsequence, ์ต์ฅ ๊ณตํต ๋ถ๋ถ ์์ด)๋ฌธ์ ๋ ๋ ์์ด์ด ์ฃผ์ด์ก์ ๋, ๋ชจ๋์ ๋ถ๋ถ ์์ด์ด ๋๋ ์์ด ์ค ๊ฐ์ฅ ๊ธด ๊ฒ์ ์ฐพ๋ ๋ฌธ์ ์ด๋ค.
์๋ฅผ ๋ค์ด, ACAYKP์ CAPCAK์ LCS๋ ACAK๊ฐ ๋๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค๊ณผ ๋์งธ ์ค์ ๋ ๋ฌธ์์ด์ด ์ฃผ์ด์ง๋ค. ๋ฌธ์์ด์ ์ํ๋ฒณ ๋๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ์ต๋ 1000๊ธ์๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ๋ ๋ฌธ์์ด์ LCS์ ๊ธธ์ด๋ฅผ ์ถ๋ ฅํ๋ค.
'Algorithm Problem > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[python] ๋ฐฑ์ค - 1916. ์ต์๋น์ฉ ๊ตฌํ๊ธฐ (0) | 2020.09.23 |
---|---|
[python] ๋ฐฑ์ค - 2225. ํฉ๋ถํด (0) | 2020.09.22 |
[python] ๋ฐฑ์ค - 11497. ํต๋๋ฌด (0) | 2020.09.21 |
[python] ๋ฐฑ์ค - 2410. 2์ ๋ฉฑ์์ ํฉ (0) | 2020.09.21 |
[python] ๋ฐฑ์ค - 4883. ์ผ๊ฐ ๊ทธ๋ํ (0) | 2020.09.20 |