9252번: LCS 2
LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다.
www.acmicpc.net
DP를 이용하자!
아래 문제와 비슷하니 자세한 원리 설명은 아래 글에서 보면 된다.
[백준 9251] LCS (python)
9251번: LCS LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된..
hillier.tistory.com
- 행이 A+1 열이 B+1인 dp 배열을 생성한다. (default = "")
- for문을 돌면서 A[i-1] 와 B[j-1]의 문자가 같다면 이전 것(dp[i-1][j-1])에서 현재 문자를 더해준다.
- 아니라면 이전 행(dp[i-1][j]) 또는 열(dp[i][j-1]) 값 중 길이가 긴 값으로 update 해준다.
import sys
input = sys.stdin.readline
A = input().rstrip()
B = input().rstrip()
dp = [[""]*(len(B)+1) for _ in range(len(A)+1)]
for i in range(1, len(A)+1):
for j in range(1, len(B)+1):
if A[i-1] == B[j-1]:
dp[i][j] = dp[i-1][j-1]+A[i-1]
else:
left = dp[i][j-1]
up = dp[i-1][j]
if len(left) < len(up):
dp[i][j] = up
else:
dp[i][j] = left
result = dp[len(A)][len(B)]
print(len(result))
if len(result):
print(result)




최근댓글