[백준 9251번] LCS (파이썬, 최장 공통 부분 수열, DP)
728x90
반응형
연속된 부분 수열은 아니고 각 문자열을 이루고 있는 문자들 순서만 맞춰서 최장 공통 부분 수열을 구하는 문제이다
a, b 두 문자열의 길이 +1 (각 첫번째 인덱스에 들어가는 값은 초기값인 0이다.)
인덱스 i,j를 비교해서 a와 b의 각 위치에 들어간 문자가 같다면 이전 최대 길이 +1 을 해주면 된다.
1: acaykp , 2: capcak에서
1의 부분 문자인 a(인덱스 0)만 봤을 때 2에서 c인 경우 0, ca인 경우 1 이런식으로 추가되는 문자가 같다면 1
증가시키는 식으로 해결한다.
import sys
input=sys.stdin.readline
a=input().strip() # 엔터키도 들어가지 않도록
b=input().strip()
# print(a,len(a))
dp=[[0]*(len(b)+1) for _ in range(len(a)+1)]
for i in range(1,len(a)+1):
for j in range(1,len(b)+1):
if a[i-1]==b[j-1]: # a,b는 0부터 시작, dp배열은 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[-1][-1])
728x90
반응형
'백준' 카테고리의 다른 글
[백준] 1244번 스위치 켜고 끄기 (java) (0) | 2021.02.01 |
---|---|
[백준 1157번] 단어 공부 (python) (0) | 2020.12.24 |
[백준 1059번] 좋은 구간 (실버 5) (0) | 2020.12.21 |
[백준] 1010번 다리놓기 (실버) (0) | 2020.12.21 |
[백준] 팰린드롬 만들기 (1254번, 파이썬) (0) | 2020.12.16 |
TAGS.