문제
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 |