관리 메뉴

기억을 위한 기록들

[백준 1149: RGB거리] - C++ 본문

카테고리 없음

[백준 1149: RGB거리] - C++

에드윈H 2021. 1. 17. 15:49

www.acmicpc.net/problem/1149

 

1149번: RGB거리

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

www.acmicpc.net

#include <iostream>
#include <algorithm>
using namespace std;
int dp[3][1000];
int rgb[3][1000];
int main() {
	int n; //집 갯수
	cin >> n;
	for (int index = 0; index < n; index++)
	{
		cin >> rgb[0][index]; //R값
		cin >> rgb[1][index]; //G값
		cin >> rgb[2][index]; //B값
	}

	dp[0][0] = rgb[0][0];
	dp[1][0] = rgb[1][0];
	dp[2][0] = rgb[2][0];

	for (int index = 1; index < n; index++)
	{
		dp[0][index] = min({ dp[1][index - 1],dp[2][index - 1] }) + rgb[0][index]; //현재를 r로 칠할 때
		dp[1][index] = min({ dp[0][index - 1],dp[2][index - 1] }) + rgb[1][index]; //현재를 g로 칠할 때
		dp[2][index] = min({ dp[1][index - 1],dp[0][index - 1] }) + rgb[2][index]; //현재를 b로 칠할 때
	}
    
	cout << min({ dp[0][n - 1],dp[1][n - 1] ,dp[2][n - 1] }) << endl;
    
	return 0;
}