문제풀이

BaekJoon(9251)::LCS

문제

 

9251번: LCS

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

www.acmicpc.net

문제파악

해당문제는 단순하게 제목에서부터 풀이법을 말해주고있다.

 

Longest Common Sub-sequence Algorithm(LCS, 최장 공통 부분수열)

Longest Common Sub-sequence Algorithm(LCS) LIS알고리즘을 정리하다가 비슷한류의 알고리즘으로 보여 함께 이어서 정리하려고 한다. 이문제 또한 아마 DP를 이용한 문제가 될것으로 생각된다. 다만 문자로

dev-sanghun.tistory.com

개인적으로 정리해두 해당글을 참조하면 될 듯하다.

문제풀이

#include<iostream>
#include<string>
using namespace std;

int dp[1001][1001] = { 0, };
int max_lengh = 0;

int max(int num1, int num2) {
	return num1 > num2 ? num1 : num2;
}

int main() {
	string str1;
	string str2;

	cin >> str1 >> str2;

	for (int i = 0;i <= str1.length();i++) {
		
		for (int j = 0; j <= str2.length(); j++) {
			if (i == 0 || j == 0) {
				dp[i][j] = 0;
			}
			else if (str1[i-1] == str2[j-1]) {
				dp[i][j] = dp[i - 1][j - 1] + 1;
			}
			else {
				dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
			}

			max_lengh = max(max_lengh, dp[i][j]);
		}
	}
	cout << max_lengh << endl;

	return 0;
}

 

'문제풀이' 카테고리의 다른 글

BaekJoon(5582)::공통 부분 문자열  (0) 2021.12.27
BaekJoon(9252)::LCS 2  (0) 2021.12.27
BaekJoon(1904)::01타일  (0) 2021.12.16
BaekJoon(9184)::신나는 함수 실행  (0) 2021.12.16
BaekJoon(11053)::가장 긴 증가하는 부분 수열  (0) 2021.12.14