반응형
[ Contents ]
1. 문제 (링크 참조)
2. 문제 풀이
ACAYKP
CAPCAK
두 문자열의 LCS(Longest Common Subsequence, 최장 공통 부분 수열)을 구하는 문제입니다. 단순히 부분 문자열을 구하는 게 아니라, 떨어져 있어도 순서만 맞으면 공통 부분 수열이 될 수 있습니다.
2022.02.12 - [Algorithm] - [Algorithm] 메모해두고 불러와서 사용하는 동적 프로그래밍(DP)
DP를 이용해서, 한 문자열을 기준으로 같은 철자가 몇 개나 있는지 계산합니다.
1차원 배열로, 누적해서 '공통 부분 수열'을 구합니다. 철자 하나씩 같은지 비교하며, 같은 철자를 찾으면 이전까지 같았던 철자 수 + 1로 갱신합니다.
3. 코드
import sys
input = sys.stdin.readline
# 입력
a = input().rstrip()
b = input().rstrip()
# DP
len_a, len_b = len(a), len(b)
cache = [0] * len_b
for i in range(len_a):
cnt = 0
for j in range(len_b):
# 최대 누적값 유지
if cnt < cache[j]:
cnt = cache[j]
# 철자가 같으면 cnt + 1
elif a[i] == b[j]:
cache[j] = cnt + 1
print(max(cache))
반응형
'Algorithm' 카테고리의 다른 글
[구현/수학] 백준 8718 Bałwanek - 파이썬(Python) (1) | 2022.09.26 |
---|---|
[구현/수학] 백준 18414 X に最も近い値 (The Nearest Value) - 파이썬(Python) (0) | 2022.09.25 |
[구현/수학] 백준 8723 Patyki - 파이썬(Python) (1) | 2022.09.23 |
[구현/수학] 백준 15051 Máquina de café - 파이썬(Python) (0) | 2022.09.22 |
[탐색/자료구조] 백준 1991 트리 순회 - 파이썬(Python) (1) | 2022.09.21 |
댓글