https://www.acmicpc.net/problem/9251
문제
LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다.
예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다.
입력
첫째 줄과 둘째 줄에 두 문자열이 주어진다. 문자열은 알파벳 대문자로만 이루어져 있으며, 최대 1000글자로 이루어져 있다.
출력
위 블로그를 참고하여 이해하였다.
import sys
input = sys.stdin.readline
a = input().strip()
b = input().strip()
w = len(a)
h = len(b)
graph = [[0] * (w + 1) for _ in range(h + 1)]
for i in range(1, h+1):
for j in range(1, w+1):
if b[i-1] == a[j-1]:
graph[i][j] = graph[i-1][j-1] + 1
else:
graph[i][j] = max(graph[i][j-1], graph[i-1][j])
print((graph.pop()).pop())
# A C A Y K P
# 0 0 0 0 0 0 0
# C 0 0 1 1 1 1 1
# A 0 1 1 2 2 2 2
# P 0 1 1 2 2 2 3
# C 0 1 2 2 2 2 3
# A 0 1 2 3 3 3 3
# K 0 1 2 3 3 4 4
'Coding Test > 백준' 카테고리의 다른 글
[백준] / [Python] / [10844] 쉬운 계단 수 (0) | 2022.11.28 |
---|---|
[백준] / [Python] / [12865] 평범한 배낭 (0) | 2022.11.28 |
[백준] / [Python] / [2565] 전깃줄 (0) | 2022.11.26 |
[백준] / [Python] / [11054] 가장 긴 바이토닉 부분 수열 (0) | 2022.11.25 |
[백준] / [Python] / [11053] 가장 긴 증가하는 부분 수열 (0) | 2022.11.25 |