[BaekJoon] 9252๋ฒ : LCS 2
Updated:
9252๋ฒ : LCS 2
[BaekJoon] ๋ฐฑ์ค 9251๋ฒ : LCS ์ ๋ ๋ฒ์งธ ๋ฌธ์ ์ด๋ค.
9251๋ฒ์ LCS ์ ๊ธธ์ด๋ง ๊ตฌํ๋ฉด ๋์ง๋ง ์ด ๋ฌธ์ ๋ ๊ธธ์ด์ ํจ๊ป LCS ๋ฅผ ๋ฐํํด์ผ ํ๋ค.
๊ธธ์ด๋ง ๊ตฌํ ๋๋ ๋ฌธ์์ด ๊ธธ์ด๋ง ๊ฐ์ง๊ณ dp ๋ฅผ ํ๋ค๋ฉด ์ด๋ฒ์๋ ๊ธธ์ด ๋์ ๋ฌธ์์ด ์์ฒด๋ฅผ ๊ฐ์ง๊ณ dp ๋ฅผ ์ํํ๋ฉด ๋๋ค.
์๊ณ ๋ฆฌ์ฆ์ ๋น๊ตํ๋ ๋ฌธ์๊ฐ ๋ค๋ฅด๋ฉด ํ์ฌ ์์น์์ ์ผ์ชฝ, ์์ชฝ ์ค ๊ธด ๋ฌธ์์ด์ ๊ทธ๋๋ก ๊ฐ์ ธ์ค๊ณ
๋ฌธ์๊ฐ ๊ฐ๋ค๋ฉด ์ผ์ชฝ ์ ๋๊ฐ์ ์์น์ ๋ฌธ์์ด๊ณผ ํ์ฌ ๋ฌธ์์ด์ ๋ํ๋ค.
ํ๋ ฌ๋ก ๊ทธ๋ ค์ ํํํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
def solution():
len_fisrt = len(first)
len_second = len(second)
dp = [[''] * (len_fisrt + 1) for _ in range(len_second + 1)]
for i in range(1, len_second + 1):
for j in range(1, len_fisrt + 1):
if second[i - 1] == first[j - 1]:
dp[i][j] = dp[i - 1][j - 1] + second[i - 1]
else:
if len(dp[i - 1][j]) < len(dp[i][j - 1]):
dp[i][j] = dp[i][j - 1]
else:
dp[i][j] = dp[i - 1][j]
print(len(dp[len_second][len_fisrt]))
print(dp[len_second][len_fisrt])
return
if __name__ == '__main__':
first = input()
second = input()
solution()
Leave a comment