본문 바로가기

Algorithm

[동적계획법 1 단계] 백준 9251번 LCS oo

반응형

문제

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

예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다.

입력

첫째 줄과 둘째 줄에 두 문자열이 주어진다. 문자열은 알파벳 대문자로만 이루어져 있으며, 최대 1000글자로 이루어져 있다.

출력

첫째 줄에 입력으로 주어진 두 문자열의 LCS의 길이를 출력한다.

long long ..

#include <iostream>
#include <vector>
#include<queue>
#include <string.h>
#include <map>
#include<algorithm>
using namespace std;

long long LCS[1001][1001];


int main() {
	
	string str1, str2;
	cin >> str1 >> str2;
	str1 = '0' + str1;
	str2 = '0' + str2;

	for (int i = 0; i < str1.size(); i++)
	{
		for (int j = 0; j < str2.size(); j++)
		{
			if (!i || !j)
			{
				continue;
			}

			if (str1[i] == str2[j])
			{
				LCS[i][j] = LCS[i - 1][j - 1] + 1;
			}
			else
			{
				LCS[i][j] = max(LCS[i - 1][j], LCS[i][j - 1]);
			}
		}
	}

	cout << LCS[str1.size() - 1][str2.size() - 1] << endl;
}
반응형