Algorithm/Baekjoon

[Python] 9252. LCS2

느낌표 공장장 2022. 1. 1. 20:49
seq1 = input()  # 문자열 1
seq2 = input()  # 문자열 2
seq1_l = len(seq1) + 1  # 각 문자열의 길이
seq2_l = len(seq2) + 1
dp = [["" for _ in range(seq2_l)] for _ in range(seq1_l)]   # LCS를 저장할 DP

for i in range(1, seq1_l):
    for j in range(1, seq2_l):
        if seq1[i-1] == seq2[j-1]:  # 방금 막 추가한 문자가 같다면
            dp[i][j] = dp[i-1][j-1] + seq1[i-1] # 기존 문자열 + 방금 문자
        else:                       # 같지 않다면
            if len(dp[i-1][j]) < len(dp[i][j-1]):   # 현재 dp의 좌측과 위의 값중에 더 큰 값으로 저장
                dp[i][j] = dp[i][j-1]
            else:
                dp[i][j] = dp[i-1][j]

lcs_l = len(dp[-1][-1]) # 두 문자열 LCS의 길이
print(lcs_l)
if lcs_l:   # LCS의 길이가 1 이상인 경우만 LCS 출력
    print(dp[-1][-1])

'Algorithm > Baekjoon' 카테고리의 다른 글

[Python] 14719. 빗물  (0) 2022.01.01
[Python] 2346. 풍선 터뜨리기  (0) 2022.01.01
[Python] 11723. 집합  (0) 2022.01.01
[Python] 1238. 파티  (0) 2022.01.01
[Python] 1504. 특정한 최단 경로  (0) 2021.12.16