최대 1 분 소요

Problem

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

Idea

dp[i]는 각각 i번째로 R, G, B를 칠하는 비용으로 한다. dp[i]는 i번째 색과 다른 색의 dp[i-1]중에 가장 적은 비용을 골라 거기에 i번째 색을 칠하는 비용이 된다. 이를 반복하면 dp[N]번째에는 N번째 집을 각각의 색으로 칠한 케이스의 비용이 나오게 된다.

Code

#include <stdio.h>

int rst[2][3];
int temp[3];
int colIdx = 0;

int main()
{	
	int N;
	scanf("%d", &N);
	
	scanf("%d %d %d", &rst[colIdx][0], &rst[colIdx][1], &rst[colIdx][2]);
	
	int i;
	for(i = 0; i < N-1; i++){
		int lastIdx = colIdx;
		colIdx = colIdx == 0 ? 1 : 0;
		
		scanf("%d %d %d", &temp[0], &temp[1], &temp[2]);
		
		rst[colIdx][0] = temp[0] + (rst[lastIdx][1] < rst[lastIdx][2] ? rst[lastIdx][1] : rst[lastIdx][2]);
		rst[colIdx][1] = temp[1] + (rst[lastIdx][0] < rst[lastIdx][2] ? rst[lastIdx][0] : rst[lastIdx][2]);
		rst[colIdx][2] = temp[2] + (rst[lastIdx][0] < rst[lastIdx][1] ? rst[lastIdx][0] : rst[lastIdx][1]);
	}
	
	printf("%d\n", rst[colIdx][0] < rst[colIdx][1] ? 
	(rst[colIdx][0] < rst[colIdx][2] ? rst[colIdx][0] : rst[colIdx][2]) : (rst[colIdx][1] < rst[colIdx][2] ? rst[colIdx][1] : rst[colIdx][2]));
	
	return 0;
}

Comment

태그: ,

카테고리:

업데이트: