알고리즘/DP

[백준] 1958 LCS 3

HJ39 2023. 4. 16. 20:54

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