๊ณจ๋5 : ๋์ ๊ณํ๋ฒ ๋ฌธ์ ์ด๋ค.
ํ์ด
dp[i][j] = (i, j)๋ฒ์งธ ์์ด์ ์์๋ฅผ ํฌํจํ์ ๋, ๊ฐ์ง๋ ์ต์ฅ ์์ด์ ๊ธธ์ด
dp[i][j] = max(dp[i-1][j-1]~dp[0][0])
ํ์ง๋ง ์ค์ ๊ตฌํ์ ์ด๋ฐ์์ผ๋ก ํ๊ฒ ๋๋ฉด, ๋ก ์๊ฐ ์ด๊ณผ๊ฐ ๋ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ i๋ฒ์งธ ์์๋ฅผ ์ ๋ฐ์ดํธ ํ ์ดํ์, dp์ ๊ฐ์ด ์ฌ์ฉ์ด ๋๋์ง ํ์ธํ ํ์๊ฐ ์๋ค.
๋ฌด์กฐ๊ฑด์ ์ผ๋ก ์ด์ ์์(i)๋ฅผ ๋ณธ ๋ค์๋ ๊ฐ์ด ํฐ ์ํ๋ก ์ ์ง๋๋ฉฐ, ๋ค์ ์ํ์ ์ต์ฅ ๊ธธ์ด๋ ์ด ๊ฐ์ผ๋ก๋ถํฐ ๋์ถ๋ ์ ๋ฐ์ ์๋ค. ๋ฐ๋ผ์ ์ต์ ํ๊ฐ ๊ฐ๋ฅํ๋ค.
Code
#include <iostream>
#include <string>
using namespace std;
int dp[1001] = {0,};
int main(){
string a, b;
cin >> a >> b;
for (int i = 0; i < a.size(); i++) {
int temp[1001];
for (int j = 0; j < b.size(); j++) {
temp[j] = dp[j];
}
for (int j = 0; j < b.size(); j++) {
if (a[i] == b[j]) {
int maxvalue = 0;
for (int k = 0; k < j; k++) {
if (temp[k] > maxvalue) {
maxvalue = temp[k];
}
}
dp[j] = maxvalue+1;
}
}
// for (int k = 0; k < b.size(); k++) {
// cout << dp[k] << " ";
// }
// cout << '\n';
}
int ans = 0;
for (int i = 0; i < b.size(); i++) {
if (ans < dp[i]) {
ans = dp[i];
}
}
cout << ans << '\n';
return 0;
}