PS/동적 계획 알고리즘[DP]

백준 1958 LCS 3(c++)

SeungbeomKim 2022. 7. 24. 22:35
반응형

https://www.acmicpc.net/problem/1958

 

1958번: LCS 3

첫 줄에는 첫 번째 문자열이, 둘째 줄에는 두 번째 문자열이, 셋째 줄에는 세 번째 문자열이 주어진다. 각 문자열은 알파벳 소문자로 이루어져 있고, 길이는 100보다 작거나 같다.

www.acmicpc.net

<코드>

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
	vector<vector<vector<int>>>dp(101,vector<vector<int>>(101,vector<int>(101,0)));
	string s1,s2,s3;
	cin>>s1>>s2>>s3;
	for(int i=1;i<=s1.size();i++)
	{
		for(int j=1;j<=s2.size();j++)
		{
			for(int k=1;k<=s3.size();k++)
			{
				if(s1[i-1]==s2[j-1] && s2[j-1]==s3[k-1]){
					dp[i][j][k]=dp[i-1][j-1][k-1]+1;
				}
				else
				{
					dp[i][j][k] = max({dp[i-1][j][k],dp[i][j-1][k],dp[i][j][k-1]});
				}
			}
		}
	}
	cout<<dp[s1.size()][s2.size()][s3.size()];
}

LCS

2022.07.22 - [백준 알고리즘/동적 계획 알고리즘(DP)] - 백준 9251 LCS(c++) 문제에서 2차원 배열이 3차원으로 바뀐 것이 전부이다.

왜냐하면 비교해야할 문자열이 3개이기 때문이다. 알고리즘은 동일한 방식으로 적용시키면 끝이다 !

반응형

'PS > 동적 계획 알고리즘[DP]' 카테고리의 다른 글

백준 2579 계단 오르기(c++)  (0) 2022.08.23
백준 2294 동전 2(c++)  (0) 2022.07.29
백준 2293 동전 2(c++)  (0) 2022.07.29
백준 5582 공통 부분 문자열(c++)  (0) 2022.07.24
백준 9251 LCS(c++)  (0) 2022.07.22