우노
[DP] 백준 1958번 “LCS 3” Python 풀이 본문
문제 링크
풀이
- 2차원 DP 테이블을 사용한 LCS 문제와 동일한 방식으로, 3차원 DP 테이블을 사용해서 해결할 수 있습니다.
- 기본적인 LCS 알고리즘은 해당 포스트에선 생략하겠습니다.
- 코드 작성은 쉬울 수 있으나, 시각적으로는 잘 그려지지 않는 것 같습니다.
코드
import sys
# 각 문자열 입력
first = sys.stdin.readline().rstrip()
second = sys.stdin.readline().rstrip()
third = sys.stdin.readline().rstrip()
# DP 테이블 초기화
dp = [[[0] * (len(third)+1) for _ in range(len(second)+1)] for _ in range(len(first)+1)]
# LCS 진행
for i in range(1, len(first)+1):
for j in range(1, len(second)+1):
for k in range(1, len(third)+1):
# 3개의 문자가 같을 경우
if (first[i-1] == second[j-1] == third[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])
print(dp[len(first)][len(second)][len(third)])
'Algorithm > Dynamic Programming' 카테고리의 다른 글
[DP] 백준 1912번 “연속합” Python 풀이 (0) | 2022.11.15 |
---|---|
[DP] 백준 12852번 “1로 만들기 2” Python 풀이 (0) | 2022.11.15 |
[DP] 백준 2169번 “로봇 조종하기” Python 풀이 (1) | 2022.10.13 |
[DP] 백준 5582번 “공통 부분 문자열” Python 풀이 (0) | 2022.10.13 |
[DP] 백준 7579번 “앱” Python 풀이 (0) | 2022.10.13 |
Comments