BOJ Code/Gold

[백준/BOJ] gold5 - 9251번 LCS (Python)

NIMHO 2023. 5. 11. 11:57
728x90

▶9251 - LCS

백준 로고

문제

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

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

 

입력

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

 

출력

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

728x90

풀이

해당 문제는 dp를 이용해서 풀면 되는 문제이다.

각 문자 길이에 맞게 2차원 dp를 만들어서, 이중 for문으로 비교하면 된다.

 

골드 5라고 되어있지만 코드 길이나 난이도는 실버라 해도 무방한 문제이다.

a = input()
b = input()

dp = [[0 for _ in range(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])

print(dp[-1][-1])
728x90