⌨️CS-PS/백준_동적프로그래밍[DP]

[Baekjoon/백준][1149][C/C++] RGB거리

미르의 블로그 2023. 2. 19. 23:47
728x90
반응형
『목차』
0. 개요

1. 문제
2. 풀이
3. 코드

0. 개요

동적 프로그래밍(Dynamic Programming) 문제. 17404번 RGB거리2 문제와 세트문제이다.

RGB거리1(1149번)문제는 선형배치문제라 할 수 있고, RGB거리2(17404번)문제는 원형배치문제라 할 수 있다.

1. 문제

 

1149번: RGB거리

첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나

www.acmicpc.net

[문제]

RGB거리에는 집이 N개 있다. 거리는 선분으로 나타낼 수 있고, 1번 집부터 N번 집이 순서대로 있다.

집은 빨강, 초록, 파랑 중 하나의 색으로 칠해야 한다. 각각의 집을 빨강, 초록, 파랑으로 칠하는 비용이 주어졌을 때, 아래 규칙을 만족하면서 모든 집을 칠하는 비용의 최솟값을 구해보자.

  • 1번 집의 색은 2번 집의 색과 같지 않아야 한다.
  • N번 집의 색은 N-1번 집의 색과 같지 않아야 한다.
  • i(2 ≤ i ≤ N-1)번 집의 색은 i-1번, i+1번 집의 색과 같지 않아야 한다.

[입력]

첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나 같은 자연수이다.

[출력]

첫째 줄에 모든 집을 칠하는 비용의 최솟값을 출력한다.

[예제 입력 1]

3
26 40 83
49 60 57
13 89 99

[예제 출력 1]

96

[예제 입력 2]

3
1 100 100
100 1 100
100 100 1

[예제 출력 2]

3

[예제 입력 3]

3
1 100 100
100 100 100
1 100 100

[예제 출력 3]

102

[예제 입력 4]

6
30 19 5
64 77 64
15 19 97
4 71 57
90 86 84
93 32 91

[예제 출력 4]

208

[예제 입력 5]

8
71 39 44
32 83 55
51 37 63
89 29 100
83 58 11
65 13 15
47 25 29
60 66 19

[예제 출력 5]

253

2. 풀이

Bottom Up(상향식) 방식을 통해 풀었다.

table 배열에 갱신되는 값은 아래 그림과 같은 원리를 따른다.

맨 마지막 값이 갱신되면, 배열 제일 아래쪽의 3개의 값 중 최솟값을 구해 출력하면 된다.

[Baekjoon/백준][1149][C/C++] RGB거리

3. 코드

#pragma warning(disable:4996)
#include <stdio.h>

#define min(a,b) (((a) < (b)) ? (a) : (b))

int table[1001][3] = {}; //R=0, G=1, B=2

int main(int argc, char* argv[]) {
	/* Input */
	int N; scanf("%d", &N);
	for (int i = 1; i <= N; i++)
		scanf("%d %d %d", &table[i][0], &table[i][1], &table[i][2]);

	/* DP */
	for (int i = 2; i <= N; i++) {
		table[i][0] += min(table[i - 1][1], table[i - 1][2]);
		table[i][1] += min(table[i - 1][0], table[i - 1][2]);
		table[i][2] += min(table[i - 1][0], table[i - 1][1]);
	}

	/* Output */
	printf("%d", min(table[N][0], min(table[N][1], table[N][2])));

	/* End */
	return 0;
}
728x90
반응형