[백준] 1958번 LCS3 - 파이썬/문자열,DP

JinUk Lee·2023년 2월 3일
0

백준 알고리즘

목록 보기
36/78

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



A = input()
B = input()
C = input()

ans = 0
DP = [[ [0] * (len(C)+1) 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):
        for k in range(1,len(C)+1):

            if A[i-1] == B[j-1]==C[k-1]:
                DP[i][j][k]+=DP[i-1][j-1][k-1]+1
            else:
                DP[i][j][k]+=max(DP[i-1][j][k],DP[i][j-1][k],DP[i][j][k-1])

            ans = max(DP[i][j][k],ans)

print(ans)

LCS 문제에서 비교하는 단어가 3개로 늘어서 3차원 배열로 DP를 적용하면 쉽게 풀수있는 문제였다.

profile
개발자 지망생

0개의 댓글