Coding Test/baekjoon

[백준 9251] LCS - python (solved.ac - 골드 5)

조용장 2022. 4. 29. 23:58

https://www.acmicpc.net/problem/9251

 

9251번: LCS

LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다.

www.acmicpc.net

풀이

문제를 보았을때 알수있는 힌트

LCS -> 최장 공통 부분 수열을 찾는 문제이다. 이는 DP를 활용하여 푸는 것이 빠르게 답을 찾을 수 있다.

최장 공통 수열을 구글에 검색해보면 위키 백과에 어떻게 이용하는지 알수있다.

그 중 하나의 이미지를 가져왔는데 위 그림 처럼

1. 행과 열이 같은 경우 이전에 행, 열에 있던 값에 1을 더하는 형식

2. 비교하는 행과 그 위에 있는 열중에 큰 값을 또 집어 넣는다.

 

이렇게 구현된 리스트에 마지막 값이 최대의 길이가 된다.

 

이를 DP로 크게 2차 배열로 할수있고 하나의 리스트로도 가능하니 참고하고 생각하며 코드를 짜면 구현할 수 있다.

이 LCS에 대해서는 알고리즘을 남겨놓아야할듯하다. 

https://github.com/dydwkd486/coding_test/blob/main/baekjoon/baekjoon9251.py

 

GitHub - dydwkd486/coding_test: 코딩테스트 공부한 내용 정리

코딩테스트 공부한 내용 정리. Contribute to dydwkd486/coding_test development by creating an account on GitHub.

github.com