본문 바로가기
Algorithm/백준 알고리즘 풀이

[Baekjoon] 9251. LCS ( Longest Common Subsequence )

by newnu 2021. 4. 23.
반응형

# Problem

LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다.

예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다.

입력

첫째 줄과 둘째 줄에 두 문자열이 주어진다. 문자열은 알파벳 대문자로만 이루어져 있으며, 최대 1000글자로 이루어져 있다.

출력

첫째 줄에 입력으로 주어진 두 문자열의 LCS의 길이를 출력한다.

# Solution

n = list(input())
m = list(input())
dp = [[0]*(len(m)+1) for _ in range(len(n)+1)]
for i in range(1,len(n)+1):
    for j in range(1,len(m)+1):
        if n[i-1]==m[j-1]:
            dp[i][j] = dp[i-1][j-1]+1
        else:
            dp[i][j] = max(dp[i-1][j],dp[i][j-1])
print(dp[len(n)][len(m)])

 

dp[i][j] 

문자열 n의 i 번째 까지의 부분문자열과

문자열 m의 j 번째 까지의 부분 문자열의 최장 공통 부분) 

따라서 답은 dp[len(n)][len(m)]

반응형