"BOJ 9252 LCS 2"의 두 판 사이의 차이

 
(같은 사용자의 중간 판 2개는 보이지 않습니다)
1번째 줄: 1번째 줄:
==개요==
==개요==
{{BOJ|단계=34}}
{{BOJ|단계=34
[[분류: 동적 계획법]]
|분류1= 다이나믹 프로그래밍
}}


==같이 보기==
==같이 보기==
* [[BOJ 9251 LCS]]
* [[BOJ 9251 LCS]]
* [[BOJ 9252 LCS 2]]
* [[BOJ 1958 LCS 3]]
* [[BOJ 1958 LCS 3]]



2024년 1월 21일 (일) 00:38 기준 최신판

1 개요[ | ]

BOJ 9252 LCS 2

2 같이 보기[ | ]

3 C++[ | ]

#include <bits/stdc++.h>
using namespace std;

string s1, s2;
int dp[1001][1001] = {};
string answer;

void solve() {
    for(int i=0; i<s1.length(); i++) {
        for(int j=0; j<s2.length(); j++) {
            if(s1[i] == s2[j]) {
                dp[i+1][j+1] = dp[i][j] + 1;
            } else {
                dp[i+1][j+1] = max(dp[i][j+1], dp[i+1][j]);
            }
        }
    }
    int i=s1.length()-1;
    int j=s2.length()-1;
    while(i>=0 && j>=0) {
        if(dp[i+1][j+1] == dp[i][j+1]) {
            i--;
        } else if(dp[i+1][j+1] == dp[i+1][j]) {
            j--;
        } else {
            answer += s1[i];
            i--;
            j--;
        }
    }
}

int main() {
    cin >> s1 >> s2;
    solve();
    cout << dp[s1.length()][s2.length()] << '\n';
    for(int i=answer.size()-1; i>=0; i--) {
        cout << answer[i];
    }
}
문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}