Algorithm

Algorithm) SWEA 3304 최장 공통 부분 수열

행복하고 싶은 사람 2023. 1. 31. 19:48

swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWBOHEx66kIDFAWr&categoryId=AWBOHEx66kIDFAWr&categoryType=CODE

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

최장 공통 부분 수열 문제입니다. 

lcs를 알고 있다면 쉽지만 떠올리긴 쉽지 않은 문제라고 느껴지네요

혹 모르신다면 요 글 참고하세용

https://kuk6933.tistory.com/103

 

Algorithm) 최장 공통 부분 수열(Longest Common Subsequence) c++

DP 문제를 풀다가 만나게 된 친구입니다 BCD처럼 연속된 것만 찾는다면 최장 공통 문자열 BCDF, BCDE처럼 연속되지 않아도 된다면 최장 공통 부분 수열입니다 최장 공통 문자열의 점화식은 요렇고 if

kuk6933.tistory.com

#include<iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

int main(int argc, char** argv)
{
    int test_case;
    int T;
    cin>>T;

    for(test_case = 1; test_case <= T; ++test_case)
    {
        string a,b;
        cin>>a>>b;
        vector<vector<int>>v (1001, vector<int>(1001, 0));

        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<<"#"<<test_case<<" " << v[a.size()][b.size()]<<"\n";
    }
    return 0;
}