반응형

LCSlongest common subsequence의 약자입니다. 우리나라 말로는 최장 공통 부분 수열을 의미합니다. 

이해하기 쉽도록 longest common substring 과 비교해보겠습니다. 

 

 

substring 연속된 부분 문자열이고 subsequence 연속적이지는 않은 부분 문자열이다.

 


예를 들어 iamaboy에서 amab는 연속하는 부분 문자열이므로 substring이 되고 aaby는 순서는 일치하지만 연속적이지는 않는 subsqeunce가 됩니다.

 

 

 

LCS 개수 구하기

그렇다면 두 문자열에서의 LCS는 어떻게 구할까요?

 

 

예시를 들겠습니다. 두 문자열은 ACCGATCGGACAT 입니다.

우선 전체는 아래와 같은 구조입니다.  ( 아래에 설명이 나옵니다. 우선은 이해하지 마시고 그렇구나 넘어가세요.)

 

 

문자열 ACCG와 G의 부분 수열은 G하나 입니다. 

 

 

문자열 ACCGATCG와 G의 최대 부분 수열은 G하나 입니다. 

 

문자열 ACCGATCG와 GA의 최대 부분 수열은 G,A  총 2개 입니다. 

 

 

위와 같은 형태로 진행하다보면 아래와 같은 그림이 만들어 지는 것입니다. 

 

 

점화식의 형태로 나타낸다면, 

 

만약 두 알파벳이 같을때, dp[i][j] = dp[i -1][j - 1] +1

두 알파벳이 다를때는 dp[i][j] = max(dp[i -1][j], dp[i][j -1])

 

 

 

 

 

 

 

LCS관련 문제 모음입니다.

다 풀어보세요!

 

 백준 알고리즘

 

9251번: LCS

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

www.acmicpc.net

 

9252번: LCS 2

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

www.acmicpc.net

 

5582번: 공통 부분 문자열

두 문자열이 주어졌을 때, 두 문자열에 모두 포함된 가장 긴 공통 부분 문자열을 찾는 프로그램을 작성하시오. 어떤 문자열 s의 부분 문자열 t란, s에 t가 연속으로 나타나는 것을 말한다. 예를 들

www.acmicpc.net

 

5502번: 팰린드롬

팰린드롬이란 대칭 문자열이다. 즉, 왼쪽에서 오른쪽으로 읽었을때와 오른쪽에서 왼쪽으로 읽었을때 같다는 얘기다. 당신은 문자열이 주어졌을때, 최소 개수의 문자를 삽입하여 팰린드롬이

www.acmicpc.net

 

반응형

'알고리즘' 카테고리의 다른 글

[백준] 2470-두 용액(C++)  (0) 2021.05.25

+ Recent posts