본문 바로가기

백준/다이나믹 프로그래밍

LCS

728x90

www.acmicpc.net/problem/9251

 

9251번: LCS

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

www.acmicpc.net

#include<iostream>
#include<vector>
#include<string>
#include<cstring>
#include<algorithm>

using namespace std;
int dp[1001][1001];


int main() {


	string str;
	string str2;

	cin >> str;
	cin >> str2;

	int strl = str.size();
	int strl2 = str2.size();


	memset(dp, 0, sizeof(dp));


	for (int i = 1; i <= strl; i++) {
		for (int j = 1; j <= strl2; j++) {
			
			if (str[i-1] == str2[j-1]) {
					
				dp[i][j] = dp[i - 1][j - 1] + 1; 
			}
			else {
			
				dp[i][j] = max(dp[i][j - 1], dp[i - 1][j]); 
				
			}

		}
	
	}

	cout << dp[strl][strl2] << endl;
	


}

 

풀이를 참고해서 풀었다. 

mygumi.tistory.com/126

 

LCS(최장 공통 부분 수열) 알고리즘 :: 마이구미

이번 글은 LCS(Longest Common Subsequence) 알고리즘은 다뤄본다. 최장 공통 부분 수열(LCS)은 LIS 최장 증가 부분 수열과 비슷하게 생각하면 된다. LCS 또한 LIS와 같이 DP(동적 계획법)을 기반으로 한다. LCS.

mygumi.tistory.com

 

 

아래의 문제와 비슷하다고 느꼈다. 이차원 배열을 이용한다는 왼쪽위 혹은 위, 왼쪽을 비교해가면서 최대값을 찾는 다는 점이 비슷했던 것같다. 

 

가장 큰 정사각형 찾기

programmers.co.kr/learn/courses/30/lessons/12905 코딩테스트 연습 - 가장 큰 정사각형 찾기 [[0,1,1,1],[1,1,1,1],[1,1,1,1],[0,0,1,0]] 9 programmers.co.kr #include #include #include using namespace std;..

spacefordeveloper.tistory.com

'백준 > 다이나믹 프로그래밍' 카테고리의 다른 글

우수 마을 / Tree DP  (0) 2021.04.24
사회망 서비스 / Tree DP  (0) 2021.04.24
새로운 게임  (0) 2021.02.25
기타리스트  (0) 2021.02.21
뮤탈리스크  (0) 2021.02.19