문제
RGB거리에 사는 사람들은 집을 빨강, 초록, 파랑중에 하나로 칠하려고 한다. 또한, 그들은 모든 이웃은 같은 색으로 칠할 수 없다는 규칙도 정했다. 집 i의 이웃은 집 i-1과 집 i+1이다. 처음 집과 마지막 집은 이웃이 아니다.
각 집을 빨강으로 칠할 때 드는 비용, 초록으로 칠할 때 드는 비용, 파랑으로 드는 비용이 주어질 때, 모든 집을 칠할 때 드는 비용의 최솟값을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 집의 수 N이 주어진다. N은 1,000보다 작거나 같다. 둘째 줄부터 N개의 줄에 각 집을 빨강으로 칠할 때, 초록으로 칠할 때, 파랑으로 칠할 때 드는 비용이 주어진다.
출력
첫째 줄에 모든 집을 칠할 때 드는 비용의 최솟값을 출력한다.
예제 입력 복사
3
26 40 83
49 60 57
13 89 99
예제 출력 복사
96
왜 오답처리 되는지 모르겠음...
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int Cost[1001][4] = { 0 };
int dp[1001][4] = { 0 };
enum {R,G,B};
int main(int argc, char * argv[]) {
int n;
int sum = 0;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d %d %d", &Cost[i][R], &Cost[i][G], &Cost[i][B]);
}
for (int i = 0; i <= n; i++) {
dp[i][0] = Cost[i][R] + (Cost[i - 1][G] < Cost[i - 1][B] ? dp[i - 1][G] : dp[i - 1][B]);
dp[i][1] = Cost[i][G] + (Cost[i - 1][R] < Cost[i - 1][B] ? dp[i - 1][R] : dp[i - 1][B]);
dp[i][2] = Cost[i][B] + (Cost[i - 1][R] < Cost[i - 1][G] ? dp[i - 1][R] : dp[i - 1][G]);
}
if (dp[n][R] < dp[n][G]) {
if (dp[n][R] < dp[n][B]) {
printf("%d\n", dp[n][R]);
}
else {
printf("%d\n", dp[n][B]);
}
}
else {
if (dp[n][G] < dp[n][B]) {
printf("%d\n", dp[n][G]);
}
else {
printf("%d\n", dp[n][B]);
}
}
return 0;
}
'Computer Science > Algorithm' 카테고리의 다른 글
[Algorithm/C] BOJ.10871 X보다 작은 수 (0) | 2018.01.25 |
---|---|
[Algorithm/C] BOJ.10817 세 수 (0) | 2018.01.24 |
[Algorithm/C] BOJ.2986 파스칼 (미해결) (1) | 2018.01.20 |
[Algorithm/C] BOJ.9498 시험성적 (0) | 2018.01.19 |
[Algorithm/C] BOJ.2577 숫자의 개수 (0) | 2018.01.16 |