순간을 성실히, 화려함보단 꾸준함을

[ boj : 3793 ] Common Subsequence 본문

알고리즘,SQL/백준,BOJ

[ boj : 3793 ] Common Subsequence

폭발토끼 2021. 4. 23. 15:55

www.acmicpc.net/problem/3793

 

3793번: Common Subsequence

A subsequence of a given sequence is the given sequence with some elements (possible none) left out. Given a sequence X = <x1, x2,="" ...,="" xm=""> another sequence Z = <z1, z2,="" ...,="" zk=""> is a subsequence of X if there exists a strictly increasing sequence <i1, i2,<="" p=""> </i1,></z1,></x1,>

www.acmicpc.net

문제 : 두개의 문자열이 주어지고 서로 부분 공통 문자열의 최대 길이를 구하시오.

 

해설 : 그냥 전형적인 LCS(Longest Common Subsequence) 문제입니다.

i번째 문자와 j 번째 문자가 같다면 (i-1,j-1) 의 값에서 +1 해주면 되고 아니라면 MAX[(i-1,j),(i,j-1)]을 해주면 됩니다.

 

#include<bits/stdc++.h>

using namespace std;
using ll = long long;

string x, y;
ll dp[201][201];

void solve();

int main()
{
	
	while (true) {
		cin >> x >> y;
		if (cin.eof()==true)break;
		memset(dp, 0, sizeof(dp));
		solve();
	}
}
void solve()
{
	for (int i = 0; i < x.length(); i++) {
		for (int j = 0; j < y.length(); j++)
		{
			if (y[j] == x[i])
				dp[i + 1][j + 1] = dp[i][j] + 1;
			else
				dp[i + 1][j + 1] = max(dp[i][j + 1], dp[i + 1][j]);
		}
	}
	cout << dp[x.length()][y.length()]<<"\n";
}

'알고리즘,SQL > 백준,BOJ' 카테고리의 다른 글

[ boj : 4095 ] 최대 정사각형  (0) 2021.04.26
[ boj : 17143 ] 낚시왕  (0) 2021.04.26
[ boj : 2418 ] 단어 격자  (0) 2021.04.23
[ boj : 14678 ] 어그로 끌린 영선  (0) 2021.04.23
[ boj : 3360 ] 깡총깡총  (0) 2021.04.18