N

(백준 c++)9251 LCS 본문

백준 알고리즘

(백준 c++)9251 LCS

naeunchan 2020. 12. 30. 10:33
728x90
반응형

문제

LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다.

예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다.

입력

첫째 줄과 둘째 줄에 두 문자열이 주어진다. 문자열은 알파벳 대문자로만 이루어져 있으며, 최대 1000글자로 이루어져 있다.

출력

첫째 줄에 입력으로 주어진 두 문자열의 LCS의 길이를 출력한다.

 

eunchanee.tistory.com/168

 

(SWEA c++)3304. 최장 공통 부분 수열

swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWBOHEx66kIDFAWr&categoryId=AWBOHEx66kIDFAWr&categoryType=CODE SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학..

eunchanee.tistory.com

DP 문제 하면 나오는 LCS 문제..!

SWEA에서 푼 풀이가 있으니 위 링크를 통해 보면 될 것 같다..!

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main(void){
    vector<vector<int>> v(1001, vector<int>(1001, 0));
    string a, b;
    
    cin >> a >> b;
    
    if(a.size() > b.size()){
        swap(a, b);
    }
    
    for(int i = 1; i <= a.size(); i++){
        for(int j = 1; j <= b.size(); j++){
            if(a[i - 1] == b[j - 1]){
                v[i][j] = v[i - 1][j - 1] + 1;
            }
            else{
                v[i][j] = max(v[i - 1][j], v[i][j - 1]);
            }
        }
    }
    cout << v[a.size()][b.size()];
    return 0;
}
728x90
반응형