반응형
문제
LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다.
예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다.
문제풀이
a=input()
b=input()
ans=[0]*1000
#01
for i in range(len(a)):
tmp=0
for j in range(len(b)):
#02
if tmp<ans[j]:
tmp=ans[j]
#03
elif a[i]==b[j]:
ans[j]=tmp+1
print(max(ans))
- #01 : i 값을 모든 j값에 비교하며 값이 같은지 비교하며, 누적으로 값을 올려나갈 것이다.
- #02 : tmp가 ans[j]보다 작은 경우는 바로 일어나지 않는다.
즉 누적으로 값을 쌓기 위해, 다른 글자의 경우 누적 변수 값이 해당 위치보다 값이 작다면
그 값을으로 교체해주는 것이다.
- #03 : 만약 같은 글자라면, 그 값에 +1을 해준다.
최종적으로 가장 큰 ans 값을 출력해준다.
'프로그래밍 > 백준' 카테고리의 다른 글
[알고리즘] 백준 5525 파이썬 - IOIOI (4) | 2023.01.10 |
---|---|
[알고리즘] 백준 1564 파이썬 - 팩토리얼5 (4) | 2023.01.09 |
[알고리즘] 백준 12865 파이썬 - 평범한 배낭 (6) | 2023.01.07 |
[알고리즘] 백준 9465 파이썬 - 스티커 (3) | 2023.01.06 |
[알고리즘] 백준 16953 파이썬 - A->B (2) | 2023.01.05 |