๐Ÿ“ฆ9251: lcs


[์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด] ๊ฐ•๋™๊ทœ
Reviewed by Kade Kang (devkade12@gmail.com)
Reviewed:: 2024-01-15
๋ฌธ์ œ ํ™•์ธํ•˜๊ธฐ

ํ’€์ด

#include <bits/stdc++.h>
using namespace std;
#define endl '\n';
 
int lcs[1005][1005];
 
int main(){
    
    string source, target;
    char res[1005];     // ๊ฒฐ๊ณผ ์ €์žฅ
    int len = 0;
 
    cin >> source >> target;
 
    for(int i = 1; i <= source.length(); i++){
        for(int j = 1; j <= target.length(); j++){
            if(source[i-1] == target[j-1])              // ๋ฌธ์ž์—ด ์ธ๋ฑ์Šค์˜ ์‹œ์ž‘๋„ 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค.
                lcs[i][j] = lcs[i-1][j-1] + 1;          // ๊ฐ™์œผ๋ฉด ์ขŒ๋Œ€๊ฐ+1๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค. 
            else
                lcs[i][j] = max(lcs[i-1][j], lcs[i][j-1]);
        }
    }
 
    int i = source.length();
    int j = target.length();
 
    while(true){
        if(lcs[i][j] == 0) break;
        if(lcs[i][j] != lcs[i-1][j] && lcs[i][j] != lcs[i][j-1]){
            res[len++] = source[j-1];
            i = i - 1;
            j = j - 1;
            continue;
        }
        else{
            if(lcs[i][j] == lcs[i-1][j]) i = i-1;
            else if(lcs[i][j] == lcs[i][j-1]) j = j-1;
        }
    }
 
    cout << len << endl;
 
    return 0;
}