본문 바로가기

BOJ 9251번 : LCS 본문

BOJ

BOJ 9251번 : LCS

00rigin 2020. 3. 15. 17:02

LCS (Longest Common Subsequence)알고리즘이다.

 

문자열을 쉽게 처리하기 위하여 python으로 코드를 구성하였다.

 

최장 공통 부분 수열 문제는, 두 수열에서 공통이 되는 가장 긴 수열을 찾아내는 문제이다.

 

ACAYKP 와 CAPCAK 의 LCS는 ACAK가 될것 이다.

이 알고리즘을 이해하기 위해서 표를 그려보자면, 아래와 같다.

 

서로 같은 문자가 나올 경우, 대각선 위에서 점수를 더해준다.

서로 다른 문자가 나올 경우, 위와 왼쪽에서 큰 수를 가진다.

즉,

(_str1[j-1] == _str2[i-1]) -> arr[i][j] = arr[i-1][j-1]+1

(_str1[j-1] != _str2[i-1]) -> max(arr[i-1][j], arr[i][j-1]) 이다.

 

<소스코드>

1
2
3
4
5
6
7
8
9
10
_str1 = [x for x in input()]
_str2 = [x for x in input()]
arr = [[0* (len(_str1) + 1for _ in range(len(_str2) + 1)]
for i in range(1,len(_str2)+1):
    for j in range(1len(_str1)+1):
        if(_str1[j-1]==_str2[i-1]):
            arr[i][j] = arr[i-1][j-1]+1
        else :
            arr[i][j] = max(arr[i-1][j], arr[i][j-1])  
print(arr[len(_str2)][len(_str1)])

문제 : 

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

 

9251번: LCS

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

www.acmicpc.net

 

'BOJ' 카테고리의 다른 글

BOJ 1076번 : 저항  (0) 2020.03.15
BOJ 2225번 : 합분해  (0) 2020.03.15
BOJ 2565번 : 전깃줄  (0) 2020.03.15
BOJ 1932번 : 정수 삼각형  (0) 2020.03.15
BOJ 11054번 : 가장 긴 바이토닉 부분 수열  (0) 2020.03.14
Comments