반응형
문자열은 최대길이 1000.
dp배열은 최대길이 1000 + 1.
dp배열을 1인덱스 부터 채워나가고, 그렇기에 반복문에서 문자열의 값을 사용할 때엔 인덱스를 - 1 해준다.
같을 경우 : dp[i][j] = dp[i - 1][j - 1] + 1
다를 경우 : dp[i][j] = MAX(dp[i][j - 1], dp[i - 1][j])
#include <stdio.h>
#include <string.h>
#define MAX(a,b) ((a>=b))?a:b;
char str1[1000], str2[1000];
int dp[1001][1001];
int len1, len2;
int main() {
scanf("%s", str1);
scanf("%s", str2);
len1 = strlen(str1);
len2 = strlen(str2);
for(int i = 1; i <= len1; i++) {
for(int j = 1; j <= len2; j++) {
if(str1[i - 1] == str2[j - 1])
dp[i][j] = dp[i - 1][j - 1] + 1;
else
dp[i][j] = MAX(dp[i - 1][j], dp[i][j - 1]);
}
}
printf("%d", dp[len1][len2]);
}
참고
반응형
'[알고리즘 + 자료구조]' 카테고리의 다른 글
[알고리즘] CCW (0) | 2021.09.29 |
---|---|
소수 판별 (0) | 2021.09.09 |
[알고리즘] LIS (최장 증가 수열) (0) | 2021.01.06 |
[알고리즘] 동적계획법(2021.02.03수정) + 그리디 알고리즘 정리 1차 + (분할 vs 동적 ) (0) | 2020.12.14 |
[알고리즘] 도수 정렬 ( = 카운팅 정렬 = 계수 정렬 ) (0) | 2020.11.27 |