From 73bc68419869ab7c4a7978bc69f1e57f6d8c5078 Mon Sep 17 00:00:00 2001 From: belowyoon <92996412+belowyoon@users.noreply.github.com> Date: Tue, 12 Mar 2024 02:45:30 +0900 Subject: [PATCH] [Gold IV] Title: LCS 2, Time: 4 ms, Memory: 6004 KB -BaekjoonHub --- .../LCS\342\200\2052.cc" | 49 +++++++++++++++++++ .../README.md" | 32 ++++++++++++ 2 files changed, 81 insertions(+) create mode 100644 "\353\260\261\354\244\200/Gold/9252.\342\200\205LCS\342\200\2052/LCS\342\200\2052.cc" create mode 100644 "\353\260\261\354\244\200/Gold/9252.\342\200\205LCS\342\200\2052/README.md" diff --git "a/\353\260\261\354\244\200/Gold/9252.\342\200\205LCS\342\200\2052/LCS\342\200\2052.cc" "b/\353\260\261\354\244\200/Gold/9252.\342\200\205LCS\342\200\2052/LCS\342\200\2052.cc" new file mode 100644 index 0000000..a753d7e --- /dev/null +++ "b/\353\260\261\354\244\200/Gold/9252.\342\200\205LCS\342\200\2052/LCS\342\200\2052.cc" @@ -0,0 +1,49 @@ +#include +#include +#include +using namespace std; + +int main() +{ + ios_base::sync_with_stdio(0); + cin.tie(0); + //freopen("input.txt", "r", stdin); + + string s1, s2; + getline(cin, s1); + getline(cin, s2); + s1 = " " + s1; + s2 = " " + s2; + + vector> dp(s1.size(), vector(s2.size(), 0)); + + for (int i = 1; i < s1.size(); i++) { + for (int j = 1; j < s2.size(); j++) { + if (s1[i] == s2[j]) dp[i][j] = dp[i - 1][j - 1] + 1; + else dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]); + } + } + + int x = s1.size()-1, y = s2.size()-1; + int res = dp[s1.size()-1][s2.size()-1]; + + vector ans; + while (dp[x][y]) { + if (dp[x][y] == dp[x-1][y]) { + x--; + } else if (dp[x][y] == dp[x][y-1]) { + y--; + } else { + ans.push_back(s1[x]); + x--; + y--; + } + } + cout << res << '\n'; + if (res) { + for (int i = ans.size() - 1; i >= 0; i--) { + cout << ans[i]; + } + } + return 0; +} \ No newline at end of file diff --git "a/\353\260\261\354\244\200/Gold/9252.\342\200\205LCS\342\200\2052/README.md" "b/\353\260\261\354\244\200/Gold/9252.\342\200\205LCS\342\200\2052/README.md" new file mode 100644 index 0000000..7da8d4b --- /dev/null +++ "b/\353\260\261\354\244\200/Gold/9252.\342\200\205LCS\342\200\2052/README.md" @@ -0,0 +1,32 @@ +# [Gold IV] LCS 2 - 9252 + +[문제 링크](https://www.acmicpc.net/problem/9252) + +### 성능 요약 + +메모리: 6004 KB, 시간: 4 ms + +### 분류 + +다이나믹 프로그래밍 + +### 제출 일자 + +2024년 3월 12일 02:45:17 + +### 문제 설명 + +

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

+ +

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

+ +### 입력 + +

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

+ +### 출력 + +

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

+ +

LCS가 여러 가지인 경우에는 아무거나 출력하고, LCS의 길이가 0인 경우에는 둘째 줄을 출력하지 않는다.

+