[백준] 9251. LCS

고재욱·2021년 10월 1일

Baekjoon

목록 보기
13/35

❓ 문제 ❓
LCS

💯 문제 풀이 💯
이중 배열의 DP로 문제를 푼다. 두 개의 문자열을 이중 for문으로 하나씩 접근해, 문자가 같을때 dp[i][j] = dp[i-1][j-1]+1,dp[i-1][j], dp[i][j-1] 가장 큰 값을 저장한다. . 만약 문자가 같지 않으면 dp[i-1][j], dp[i][j-1]에서 가장 큰값을 복사한다.

#include <iostream>
#include <algorithm>
using namespace std;
int dp[1002][1002];
int main() {
	string a, b;
	cin >> a >> b;
	for (int i = 1; i <= a.size(); i++) {
		for (int j = 1; j <= b.size(); j++) {
			if (a[i-1] == b[j-1]) {
				dp[i][j] = max(dp[i-1][j-1]+1, max(dp[i-1][j], dp[i][j-1]));
			}
			else {
				dp[i][j] = max(dp[i-1][j], dp[i][j-1]);
			}
			
		}
	}
	cout << dp[a.size()][b.size()];
}

0개의 댓글