Koala - 5기/코딩테스트 준비 스터디
[백준/C++] 알고리즘 5582번 공통 부분 문자열
테크지니어22
2022. 1. 23. 00:04
오늘은 백준 알고리즘 5582번 공통 부분 문자열문제를 풀어보는 시간을 가져보겠습니다.
이 문제는 다이나믹프로그래밍으로 접근하면 수월하게 풀 수 있습니다.
문제 먼저 보겠습니다.
이 문제는 행렬테이블을 그려서 규칙성을 발견하여 점화식을 만들어 풀 수 있습니다
위의 그림처럼 문자열 두 개의 문자가 같을 때 이전에 같았던 dp[i-1][j-1] + 1 임을 파악할 수 있고
이를 토대로 arr1[i] == arr2[j]같다면 dp[i][j] = dp[i-1][j-1] +1 임을 이끌어낼 수있습니다.
코드는 다음과 같습니다.
#include <iostream>
using namespace std ;
string arr1;
string arr2;
int dp[4001][4001]= {};
int ans;
int max_result = 0 ;
int main() {
cin>>arr1>>arr2;
for(int i = 1 ; i < arr1.length()+1 ; i++){
for(int j = 1 ; j< arr2.length()+1 ; j++){
if(arr1[i-1] == arr2[j-1]){
dp[i][j] = dp[i-1][j-1]+1;
ans = max(ans,dp[i][j]);
}
}
}
cout<<ans<<endl;
}