코딩테스트
[백준/파이썬] 9251 LCS
Sun0727
2022. 12. 21. 21:18
#문제링크
https://www.acmicpc.net/problem/9251
9251번: LCS
LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다.
www.acmicpc.net
#나의풀이
import sys
if __name__=="__main__":
A = sys.stdin.readline().strip()
B = sys.stdin.readline().strip()
dp = [0] * len(B)
for i in range(len(A)):
cnt = 0
for j in range(len(B)):
if cnt < dp[j]:
cnt = dp[j]
elif A[i] == B[j]:
dp[j] = cnt + 1
print(max(dp))
#해설
LCS에 기본이 되는 문제
방식은 2차원dp와 1차원 dp 2가지를 쓰는 방법이 있는거 같고 메모리 생각했을때 1차원 dp를 사용하는게 좋다고
생각하여 1차원 dp를 사용 했습니다. 시간 자체는 똑같을꺼 같습니다.
2중루프로 각 문자열을 접근하고 cnt는 현재 최대값을 의미합니다.
만약 cnt보다 방문하는 dp값이 더 크다면 이미 다른 문자가 방문했다는것을 의미합니다. 따라서 최대값만 갱신해줍니다.
elif문으로 cnt가 dp값과 같거나 크고 문자가 같다면 방문하지 않았다는것으로 현재 dp값을 최대값 + 1로 갱신해줍니다.
자세한 설명은 아래 블로그에서 참고하였습니다.
#출처
https://myjamong.tistory.com/317
백준 9251 파이썬 - LCS - 동적 계획법
백준 9251 파이썬 https://www.acmicpc.net/problem/9251 9251번: LCS LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다
myjamong.tistory.com