본문 바로가기
{ Computer Science }/Algorithm

[알고리즘 algorithm] LCS에 대하여

by ggyongi 2021. 8. 15.
반응형

LCS : Longest Common Subsequence

두 수열이 주어졌을 때, 두 수열 모두의 부분 수열에 해당하는 수열 중 가장 긴 수열을 의미한다.

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

 

 

https://www.acmicpc.net/problem/9252

 

9252번: LCS 2

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

www.acmicpc.net

a = input()
b = input()
dp = [[0]*(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]+1
        else:
            dp[i][j] = max(dp[i-1][j], dp[i][j-1])

word = ''
lcs = dp[-1][-1]

count = 0
i = len(a)
j = len(b)
while count < lcs:
    if dp[i][j] == dp[i-1][j]:
        i -= 1
    elif dp[i][j] == dp[i][j-1]:
        j -= 1
    elif dp[i][j] > dp[i-1][j] and dp[i][j] > dp[i][j-1]:
        word += a[i-1]
        count += 1
        i -= 1
        j -= 1

print(lcs)
print(word[::-1])

 

LCS는 다이나믹 프로그래밍으로 해결한다.

 

 

 

비전공자 네카라 신입 취업 노하우

시행착오 끝에 얻어낸 취업 노하우가 모두 담긴 전자책!

kmong.com

댓글