백준 9252번: LCS 2
문제
문제 바로가기> 백준 9252번: LCS 2
풀이
DP를 이용하여 LCS의 길이를 구한 후, DP를 통해 구한 배열을 역추적해가며 LCS를 구했다!
#include<iostream>
#define MAX 1001
using namespace std;
string s1, s2;
int dp[MAX][MAX];
void solution(){
int i, j;
for(i=0; i<s1.length(); i++){ // DP를 통해 LCS 길이를 구함
for(j=0; j<s2.length(); j++){
if(s1[i] == s2[j]) dp[i+1][j+1] = dp[i][j]+1;
else dp[i+1][j+1] = max(dp[i][j+1], dp[i+1][j]);
}
}
int lenLcs = dp[i][j];
string lcs="";
while (1){ // LCS를 구함
if(dp[i][j] == dp[i-1][j-1]) { i--; j--;}
else if(dp[i][j] == dp[i-1][j]) i--;
else if(dp[i][j] == dp[i][j-1]) j--;
else {
lcs+=s1[i-1];
i--; j--;
}
if(lcs.length()==lenLcs) break;
}
cout << lenLcs << '\n';
for(i = lcs.length()-1; i>=0; i--) cout << lcs[i];
}
int main(){
ios_base::sync_with_stdio(0); cin.tie(0);
cin >> s1 >> s2;
solution();
}
Author And Source
이 문제에 관하여(백준 9252번: LCS 2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@danbibibi/백준-9252번-LCS-2저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)