728x90
#include<iostream>
#include<vector>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
int dp[1001][1001];
int main() {
string str;
string str2;
cin >> str;
cin >> str2;
int strl = str.size();
int strl2 = str2.size();
memset(dp, 0, sizeof(dp));
for (int i = 1; i <= strl; i++) {
for (int j = 1; j <= strl2; j++) {
if (str[i-1] == str2[j-1]) {
dp[i][j] = dp[i - 1][j - 1] + 1;
}
else {
dp[i][j] = max(dp[i][j - 1], dp[i - 1][j]);
}
}
}
cout << dp[strl][strl2] << endl;
}
풀이를 참고해서 풀었다.
아래의 문제와 비슷하다고 느꼈다. 이차원 배열을 이용한다는 왼쪽위 혹은 위, 왼쪽을 비교해가면서 최대값을 찾는 다는 점이 비슷했던 것같다.
'백준 > 다이나믹 프로그래밍' 카테고리의 다른 글
우수 마을 / Tree DP (0) | 2021.04.24 |
---|---|
사회망 서비스 / Tree DP (0) | 2021.04.24 |
새로운 게임 (0) | 2021.02.25 |
기타리스트 (0) | 2021.02.21 |
뮤탈리스크 (0) | 2021.02.19 |