DP를 이용해서 풀었다.
dp[i][j]이란?
문자열 a,b가 있었을 때 a의 i번째와 b의 j번째까지의 최대 공통 부분수열의 길이를 저장한 것이다.
범위 조심하기!
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int main(void)
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t;
cin >> t;
for(int tc = 1; tc <= t; tc++)
{
string a, b, ans = "";
vector<vector<int>> v(1001, vector<int>(1001, 0));
cin >> 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 << "#" << tc << " " << v[a.size()][b.size()] << endl;
}
return 0;
}
'Algorithm > SWEA' 카테고리의 다른 글
[SWEA] 3000. 중간값 구하기 (0) | 2022.02.10 |
---|---|
[SWEA] 1767. 프로세서 연결하기 (0) | 2022.02.01 |
[SWEA] 1868. 파핑파핑 지뢰찾기 (0) | 2022.01.31 |
[SWEA] 1251. 하나로 (0) | 2022.01.28 |
[SWEA] 1249. 보급로 (0) | 2022.01.28 |