본문 바로가기
코딩캠프/BOJ

[5582] 공통 부분 문자열

by 코곰_ 2024. 2. 23.
// 5582 공통 부분 문자열
// dp
#include<iostream>
#include<cstdio>
#include<string.h>
#define MAX 4001 // 최대 4000글자  
using namespace std;

int dp[MAX][MAX]; //
int max_len = 0;

string a, b;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	
	// 배열 초기화 
	memset(dp, 0, sizeof(dp));
	
	cin >> a;
	cin >> b;

	// dp 
    for(int i=1; i<=a.length(); i++){
    	for(int j=1; j<=b.length(); j++){
    		if(a[i-1] == b[j-1]){ // 같으면 -> 이전 값 + 1
    			dp[i][j] = dp[i-1][j-1] + 1;
			}
			else{ // 다르면 0으로 초기화 
				dp[i][j] = 0;
			}
		}
	}
	
	for(int i=1; i<=a.length(); i++){
		for(int j=1; j<=b.length(); j++){
			if(max_len < dp[i][j]) max_len = dp[i][j]; // 최대값 갱신
		}
	}
	printf("%d\n", max_len);


	return 0;
}

'코딩캠프 > BOJ' 카테고리의 다른 글

[5719] 거의 최단경로  (0) 2024.02.23
[2098] 외판원 순회  (0) 2024.02.23
[9252] LCS2  (0) 2024.02.23
[11660] 구간 합 구하기 5  (1) 2024.02.22
[14002] 가장 긴 증가하는 부분수열4  (0) 2024.02.22