9251. LCS
9251번: LCS
LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다.
www.acmicpc.net
- 풀이
- 아래 설명 보고 원리 이해
- LCS(Xi, Yj)를 문자열 X, Y 각각의 i, j번째 글자까지의 최장 공통 부분 문자열의 길이라고 했을 때
X[i] == Y[j]일 때 : LCS(Xi, Yj) = LCS(Xi - 1, Yj - 1) + 1
X[i] != Y[j]일 때 : LCS(Xi, Yj) = max(LCS(Xi - 1, Yj), LCS(Xi, Yj - 1))
https://velog.io/@piopiop/%EB%B0%B1%EC%A4%80-9251-LCS-%ED%8C%8C%EC%9D%B4%EC%8D%AC
[백준 9251] LCS (파이썬)
백준 9251 - LCS풀이를 찾아봐도 쉽게 이해되지 않아 직접 정리하며 이해하기 위해 포스팅을 하게 되었다. DP 문제는 내가 똑똑하지 않다는 것을 너무 적나라하게 보여주지만 풀었을 때의 쾌감도
velog.io
a = list(input().rstrip())
b = list(input().rstrip())
n = len(a)
m = len(b)
dp = [[0 for _ in range(m+1)] for _ in range(n+1)]
for i in range(1, n+1):
for j in range(1, m+1):
if a[i-1] == b[j-1]:
dp[i][j] = dp[i-1][j-1]+1
else:
dp[i][j] = max(dp[i-1][j], dp[i][j-1])
print(dp[n][m])
'코딩테스트 > BOJ' 카테고리의 다른 글
| [백준][이진탐색][LIS] 12015. 가장 긴 증가하는 부분 수열 2 (0) | 2024.03.01 |
|---|---|
| [백준][DP][LIS] 11055. 가장 큰 증가하는 부분 수열 (1) | 2024.03.01 |
| [백준][DP] 2193. 이친수 (0) | 2024.02.28 |
| [백준][DP] 2293. 동전 1 (0) | 2024.02.23 |
| [백준][DP] 9095. 1,2,3 더하기 (0) | 2024.02.22 |