반응형

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

 

1958번: LCS 3

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

www.acmicpc.net

 

두 문자열의 LCS를 구하는 방식에서 차원을 하나 추가해주었습니다.

세 문자가 같으면, 대각선 방향에서 +1한 값으로 업데이트 해줍니다.

세 문자가 다르면, 이전까지 기입된 값들 중 가장 큰 값으로 업데이트 해줍니다.

#include <iostream>
#include <algorithm>

char buf1[102], buf2[102], buf3[102];
int dp[101][101][101] = { 0 }, i, j, k;
int main() {
	scanf("%s %s %s", &buf1[1], &buf2[1], &buf3[1]);
	for (i = 1; buf1[i] != '\0'; i++) {
		for (j = 1; buf2[j] != '\0'; j++) {
			for (k = 1; buf3[k] != '\0'; k++) {
				if (buf1[i] == buf2[j] && buf2[j] == buf3[k]) {
					dp[i][j][k] = dp[i - 1][j - 1][k - 1] + 1;
				}
				else {
					dp[i][j][k] = std::max({
						dp[i - 1][j][k],
						dp[i][j - 1][k],
						dp[i][j][k - 1] });
				}
			}
		}
	}
	printf("%d", dp[i - 1][j - 1][k - 1]);
}
반응형

'Algorithm' 카테고리의 다른 글

프로그래머스 : 문자열 압축  (0) 2021.11.15
프로그래머스 : 지형 이동  (0) 2021.11.15
백준 1516 : 게임 개발  (0) 2021.11.15
백준 11779 : 최소비용 구하기 2  (0) 2021.11.15
백준 2075 : N번째 큰 수  (0) 2021.11.15

+ Recent posts