[백준/파이썬] 9251번 LCS 풀이

업데이트:



문제 정보


풀이

문제

두 문자열의 최장 공통 부분 수열(LCS) 길이를 구하는 문제입니다.

코드

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

설명

2차원 DP를 이용해 문자 일치 시 대각선+1, 불일치 시 왼쪽/위쪽 최대값을 채워 최종 LCS 길이를 얻습니다.



댓글남기기