algorithm/문제
[Python]백준 9251번/LCS/dp
유랄라-
2022. 2. 19. 14:52
반응형
🧉 문제 설명
https://www.acmicpc.net/problem/9251
9251번: LCS
LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다.
www.acmicpc.net
LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다.
예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다.
🧉 해결 방법
문자열 두개를 비교하면서
문자가 같으면 그 전번째의 가장 긴 길이인 왼쪽에 위쪽 대각선방향의 숫자에서 +1 을 한다.
문자가 다르면 왼쪽과 위쪽의 값중 가장 큰 값을 넣는다.
🧉 코드
import sys
input=sys.stdin.readline
stringA=list(input().rstrip())
stringB=list(input().rstrip())
dp=[[0]*(len(stringB)+1) for _ in range(len(stringA)+1)]
for i in range(len(stringA)):
for j in range(len(stringB)):
if(stringA[i]==stringB[j]):
dp[i+1][j+1] = dp[i][j]+1
else:
dp[i+1][j+1] = max(dp[i][j+1],dp[i+1][j])
print(dp[len(stringA)][len(stringB)])
반응형