[C] boj no. 1149 : RGB거리
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;
}