코드
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int same[1002][1002];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
string a, b;
cin >> a >> b;
int lenA = a.size();
int lenB = b.size();
for(int curA=1;curA<=lenA;curA++) {
for(int curB=1;curB<=lenB;curB++) {
if(a[curA-1] == b[curB-1]) {
same[curA][curB] = same[curA-1][curB-1] + 1;
}else if(a[curA-1] != b[curB-1]) {
same[curA][curB] = max(same[curA-1][curB], same[curA][curB-1]);
}
}
}
cout << same[lenA][lenB];
}
코드 분석
어려워보이지만 두가지 경우로 나눠서 진행하면 쉽다.
이중 for문을 통해 한글자 씩 비교하면서 같은 경우와 다른 경우에 따른 점화식을 세우면 된다.
점화식
문자가 같을 경우 => same[curA][curB] = same[curA-1][curB-1] + 1
문자가 다를 경우 => same[curA][curB] = max(same[curA-1][curB], same[curA][curB-1])
'BOJ > DP' 카테고리의 다른 글
[C++] BOJ 2579 / DP (계단 오르기, 점화식 2차원 배열 접근) (0) | 2021.08.10 |
---|---|
[C++] BOJ 9095 / DP (1, 2, 3 더하기) (0) | 2021.08.10 |
[C++] BOJ 1463 / DP (1로 만들기, 점화식 첫 도전) (0) | 2021.08.10 |