1149 RGB 거리 문제에 조건 하나만 더 추가된 문제이다.

 

1149 문제는 1번은 2번과, N번은 N-1번과 다른 색이어야 하고, 1과 N을 제외한 나머지 i번째는 i-1번째 집과 i+1째 집과 다른 색이어야 하는 문제였다.

17404 문제는 1번과 N번이 다른 색이어야 하는 조건이 추가되었다.

 

 

 

이건 1149 문제와 같은 점화식을 사용한다.

더보기

d[i][0] = Min(d[i - 1][1], d[i - 1][2]) + a[0];
d[i][1] = Min(d[i - 1][0], d[i - 1][2]) + a[1];

d[i][2] = Min(d[i - 1][0], d[i - 1][1]) + a[2];

단, 1번째 집이 R을 선택했을 경우 N번째 집은 R을 선택하지 못한다는 것만 주의해주면 된다.

 

 

 

해결 방식은 1번이 무조건 R/G/B를 고르게 한 뒤에 N번은 1번이 고른 색과 다른 색을 골라서 그 두 가지 경우를 비교한 후 값이 작은 수를 저장해놓고 이를 3번 반복하는 것이다.

 

무조건 1번이 R/G/B를 고르게 하는 방법은 고를 색 빼고는 엄청 큰 값을 넣어주면 된다.

 

 

// RGB 거리 2 (골드 4)

#include <iostream>

using namespace std;

//점화식: d[i][0] = Min(d[i - 1][1], d[i - 1][2]) + a[0];
//		  d[i][1] = Min(d[i - 1][0], d[i - 1][2]) + a[1];
//		  d[i][2] = Min(d[i - 1][0], d[i - 1][1]) + a[2];

int** d;
int** RGB;
int N;

void dynamic(int x) {

	if (x == 0) return;

	dynamic(x - 1);

	d[x][0] = min(d[x - 1][1], d[x - 1][2]) + RGB[x][0];
	d[x][1] = min(d[x - 1][0], d[x - 1][2]) + RGB[x][1];
	d[x][2] = min(d[x - 1][0], d[x - 1][1]) + RGB[x][2];

		//cout << d[x][0] << " " << d[x][1] << " " << d[x][2] << endl;

}

int main() {
// 입력
	cin >> N;

	RGB = new int* [N + 1]{};
	d = new int* [N + 1]{};
	d[0] = new int[3]{};
	RGB[0] = new int[3]{};
	for (int i = 1;i < N + 1;i++) {
		d[i] = new int[3]{};
		RGB[i] = new int[3]{};
		cin >> RGB[i][0] >> RGB[i][1] >> RGB[i][2];
	}

// 풀이
	int Ans;
	int G_1 = RGB[1][1], B_1 = RGB[1][2];

	RGB[1][1] = 10000; RGB[1][2] = 10000;

	//1번집 R
	dynamic(N);
	Ans = min(d[N][1], d[N][2]);

		//cout << endl << endl;


	//1번집 G
	RGB[1][0] = 10000; RGB[1][1] = G_1; RGB[1][2] = 10000;
	dynamic(N);
	if (Ans > min(d[N][0], d[N][2])) Ans = min(d[N][0], d[N][2]);

		//cout << endl << endl;


	//1번집 B
	RGB[1][0] = 10000; RGB[1][1] = 10000; RGB[1][2] = B_1;
	dynamic(N);
	if (Ans > min(d[N][0], d[N][1])) Ans = min(d[N][0], d[N][1]);
	
		//cout << endl << endl;

	cout << Ans;

	return 0;
}

// 2020KB, 0ms

'coding > baekjoon_codingstudy' 카테고리의 다른 글

14891 톱니바퀴 (골드 5)  (0) 2021.10.05
18239 편안한 수열 만들기 (골드 3)  (0) 2021.08.19
11657 타임머신 (골드 4)  (0) 2021.08.15
4386 별자리 만들기 (골드 4)  (0) 2021.08.15
1149 RGB 거리 (실버1)  (0) 2021.08.12

+ Recent posts