728x90
http://www.acmicpc.net/problem/9251
# 조건
- LCS(Longest Common Subsequence, 최장 공통 부분 수열)
- 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제
- 예
- ACAYKP와 CAPCAK의 LCS는 ACAK
- 첫째 줄과 둘째 줄에 두 문자열이 주어진다.
- 문자열은 알파벳 대문자로만 이루어져있으며, 최대 1000글자로 이루어져 있다.
# 접근 방법
- dp를 이용하여 최장 증가 수열을 찾아준다.
- LCS 참고
- 둘 중 하나를 기준으로 삼아서,
- 같은 문자열이 나온다면 i-1, j-1 값에서+1을 해주고
- 아니라면, i-1 또는 j-1에서 큰 값을 선택해준다.
import sys
sys.stdin = open('input.txt')
def LCS(X,Y):
X = ' '+X
Y = ' '+Y
dp = [[0] * (len(Y)) for _ in range(len(X))]
for i in range(1,len(X)):
for j in range(1,len(Y)):
if X[i] == Y[j]:
dp[i][j] = dp[i-1][j-1] + 1
else:
dp[i][j] = max(dp[i-1][j], dp[i][j-1])
return dp[len(X)-1][len(Y)-1]
a = input()
b = input()
c=LCS(a,b)
print(c)
728x90
'ALGORITHM > DP(동적 계획법)' 카테고리의 다른 글
[백준 2096번] 파이썬 - 내려가기 (1) | 2022.12.23 |
---|---|
[백준 9465번] 파이썬 - 스티커 (0) | 2022.12.13 |
[백준 23083번] 파이썬 - 꿀벌 승연이 (0) | 2022.12.10 |
[백준 1932번] 파이썬 - 정수 삼각형 (0) | 2022.12.08 |
[백준 1149번] 파이썬 - RGB 거리 (0) | 2022.12.05 |