본문 바로가기

알고리즘

[백준] 1149번 RGB거리 C++ 문제풀이

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

 

1149번: RGB거리

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

www.acmicpc.net

문제 풀이

그 전에 R을 칠한 경우, G를 칠한 경우, B를 칠한 경우를 나눠서 문제를 해결했다.

다음 R을 칠하는 경우는 그 전에 G랑 B를 칠한 경우에 현재 R을 칠하는 경우를 더해줬다. 다른 색도 마찬가지로 풀면 된다.

소스 코드

#include <iostream>
using namespace std;

int RGB[1001][3] = { 0 };
int sum[1001][3] = { 0 };

int main() {
	int N;
	cin >> N;
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < 3; j++) {
			cin >> RGB[i][j];
		}
	}
	sum[0][0] = RGB[0][0];
	sum[0][1] = RGB[0][1];
	sum[0][2] = RGB[0][2];

	for (int i = 1; i < N; i++) {
		sum[i][0] = min(sum[i - 1][1], sum[i - 1][2]) + RGB[i][0];
		sum[i][1] = min(sum[i - 1][0], sum[i - 1][2]) + RGB[i][1];
		sum[i][2] = min(sum[i - 1][1], sum[i - 1][0]) + RGB[i][2];
	}

	cout << min(sum[N - 1][0], min(sum[N - 1][1], sum[N - 1][2]));
}