LCS 2와 다르게 이번에는 3개의 문자열을 받아서 처리하는 문제이다.
LCS 2에서 두개의 문자열을 비교할 때 반복문 2번을 돌렸다면 이번에는 3번을 돌리면 된다.
□ 소스 코드
void LCS1958(){
ios::sync_with_stdio(false);
cin.tie(NULL);
string arr1, arr2, arr3;
cin >> arr1 >> arr2 >> arr3;
int LCS[101][101][101] = {0};
for(int i=0;i<=arr1.size();i++){
for(int j=0;j<=arr2.size();j++){
for(int k=0;k<=arr3.size();k++){
if(i==0 || j == 0 || k == 0){
LCS[i][j][k] = 0;
}
else if(arr1[i-1] == arr2[j-1] && arr2[j-1] == arr3[k-1]){
LCS[i][j][k] = LCS[i-1][j-1][k-1] + 1;
}
else{
LCS[i][j][k] = max(LCS[i-1][j][k], LCS[i][j-1][k]);
LCS[i][j][k] = max(LCS[i][j][k], LCS[i][j][k-1]);
}
}
}
}
cout<<LCS[arr1.size()][arr2.size()][arr3.size()]<<endl;
}
'알고리즘 > DP' 카테고리의 다른 글
[백준] 7579 앱 (0) | 2023.04.26 |
---|---|
[백준] 12865 평범한 배낭 (0) | 2023.04.18 |
[백준] 9251, 9252 LCS 1,2 (0) | 2023.04.16 |
[백준] 2565, 2568 전깃줄 1, 2 (0) | 2023.04.16 |
[백준] 11054 가장 긴 바이토닉 부분 수열 (0) | 2023.04.16 |