[백준] Baekjoon Online Judge
문제
LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다.
예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다.
입력
첫째 줄과 둘째 줄에 두 문자열이 주어진다. 문자열은 알파벳 대문자로만 이루어져 있으며, 최대 1000글자로 이루어져 있다.
출력
첫째 줄에 입력으로 주어진 두 문자열의 LCS의 길이를 출력한다.
풀이
#include <iostream>
using namespace std;
int dp[1001][1001];
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
string a, b;
cin >> a >> b;
int result = 0;
for (int i = 1; i <= a.length(); i++) {
for (int j = 1; j <= b.length(); j++) {
if (a[i - 1] == b[j - 1])
dp[i][j] = dp[i - 1][j - 1] + 1;
else
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
result = max(result, dp[i][j]);
}
}
cout << result << '\n';
return 0;
}
LCS 알고리즘을 통해 문제를 풀었다.
'백준 > C++' 카테고리의 다른 글
[Baekjoon/C++] 14002번 - 가장 긴 증가하는 부분 수열 4 (0) | 2024.05.10 |
---|---|
[Baekjoon/C++] 2206번 - 벽 부수고 이동하기 (0) | 2024.05.09 |
[Baekjoon/C++] 9935번 - 문자열 폭발 (0) | 2024.05.07 |
[Baekjoon/C++] 1504번 - 특정한 최단 경로 (0) | 2024.05.06 |
[Baekjoon/C++] 1238번 - 파티 (0) | 2024.05.05 |