9251.โ LCS
์ ๋ฐ์ดํธ ์๊ฐ : 2023-02-26 17:15:48 +0000[Gold V] LCS - 9251
์ฑ๋ฅ ์์ฝ
๋ฉ๋ชจ๋ฆฌ: 56548 KB, ์๊ฐ: 528 ms
๋ถ๋ฅ
๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ(dp), ๋ฌธ์์ด(string)
๋ฌธ์ ์ค๋ช
LCS(Longest Common Subsequence, ์ต์ฅ ๊ณตํต ๋ถ๋ถ ์์ด)๋ฌธ์ ๋ ๋ ์์ด์ด ์ฃผ์ด์ก์ ๋, ๋ชจ๋์ ๋ถ๋ถ ์์ด์ด ๋๋ ์์ด ์ค ๊ฐ์ฅ ๊ธด ๊ฒ์ ์ฐพ๋ ๋ฌธ์ ์ด๋ค.
์๋ฅผ ๋ค์ด, ACAYKP์ CAPCAK์ LCS๋ ACAK๊ฐ ๋๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค๊ณผ ๋์งธ ์ค์ ๋ ๋ฌธ์์ด์ด ์ฃผ์ด์ง๋ค. ๋ฌธ์์ด์ ์ํ๋ฒณ ๋๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ์ต๋ 1000๊ธ์๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ๋ ๋ฌธ์์ด์ LCS์ ๊ธธ์ด๋ฅผ ์ถ๋ ฅํ๋ค.
๐ก Solutions
๐ LCS.py
text1 = list(input()) # ๊ธ 1
text2 = list(input()) # ๊ธ 2
words = set(text1) & set(text2)
lt1 = len(text1)
lt2 = len(text2)
'''
๊ธ์๋ฅผ ํ์์ ํ์ฌ ์ฐ์ ์์์ ๋ํ ๊ฐ์ ์ฐพ์๋ณด๊ธฐ ์ํด
dp ํน์ ํ์(์ด๋ถํ์)์ ์งํ ํ๋ ค๊ณ ํ์์.
์ด๋ถ ํ์์ ํ๊ธฐ์ ์ค๋ ฅ์ด ์กฐ๊ธ ๋ถ์กฑํด dp๋ฅผ ์ํ
0 0 A C A Y K P
0 0 0 0 0 0 0 0
C 0 0 1 1 1 1 1
A 0 1 1 2 2 2 2
P 0 0 0 0 0 0 0
C 0 0 0 0 0 0 0
A 0 0 0 0 0 0 0
K 0 0 0 0 0 0 0
-> ๊ณผ ๊ฐ์ด matrix ๋ฅผ ๋ง๋ค์ด ๋๊ณ
๊ฒน์น๋ ๊ฐ์ด ์์ ๋ 1 ์ฉ ๋๋ ค์ฃผ๋ฉด ๊ฒฐ๊ณผ ๊ฐ์ด ๋์ด
Padding์ ์ค ์ด์ ๋ idx์ ํธ์์ฑ ๋ ์์ง๋ง, ์ด๊ธฐ์ ๊ฐ์ ์ค์ ํ ๋
matrix[-1][-1] ์ด ๋์ด ์ด์ ์ ๊ฐ์ ๋ฐ์์ค๋ ์ผ์ ๋ฐฉ์งํ๊ธฐ ์ํด
padding์ ์ค์
'''
matrix =[[0 for _ in range(lt1+1)] for _ in range(lt2+1)]
ans = 0
for i in range(1,lt2+1):
for j in range(1,lt1+1):
if text2[i-1] == text1[j-1]: # matrix์ ์๋ ๊ธ์๊ฐ ๋์ผํ๋ดใด
matrix[i][j] = matrix[i-1][j-1]+1 # 1์ ์ถ๊ฐํด์ค๋ค.
else:
matrix[i][j] = max(matrix[i-1][j],matrix[i][j-1])
# text1 ์์ ๋ถํฐ ์์ํด ๊ฐ์ ธ์ค๋ ๋ฌธ์์ด๊ณผ
# text2 ์์(์ด์ ์์ ๋ถํฐ ์์์จ) ๋ฌธ์์ด๊ณผ
# ๊ณ์ฐ๋๋ ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ๋น๊ตํ์ ๋ ํฐ๊ฐ์ ๊ฐ์ ธ์ด
print(matrix[lt2][lt1])