[ Contents ]
1. 문제 (링크 참조)
9251번: LCS
LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다.
www.acmicpc.net
2. 문제 풀이
ACAYKP
CAPCAK
두 문자열의 LCS(Longest Common Subsequence, 최장 공통 부분 수열)을 구하는 문제입니다. 단순히 부분 문자열을 구하는 게 아니라, 떨어져 있어도 순서만 맞으면 공통 부분 수열이 될 수 있습니다.
2022.02.12 - [Algorithm] - [Algorithm] 메모해두고 불러와서 사용하는 동적 프로그래밍(DP)
[Algorithm] 메모해두고 불러와서 사용하는 동적 프로그래밍(DP)
[ Contents ] 1. 동적 프로그래밍(Dynamic Programming, 동적계획법) 동적계획법(Dynamic programming, DP): 작은 문제들에 대한 결과를 배열(리스트)에 저장하고, 이를 이용해서 입력 크기가 더 큰 문제를 점진..
star7sss.tistory.com
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 |
댓글