728x90
https://www.acmicpc.net/problem/1149
RGB거리 실패
시간 제한메모리 제한제출정답맞은 사람정답 비율
0.5 초 (추가 시간 없음) | 128 MB | 38775 | 17920 | 13458 | 47.319% |
문제
RGB거리에 사는 사람들은 집을 빨강, 초록, 파랑중에 하나로 칠하려고 한다. 또한, 그들은 모든 이웃은 같은 색으로 칠할 수 없다는 규칙도 정했다. 집 i의 이웃은 집 i-1과 집 i+1이고, 첫 집과 마지막 집은 이웃이 아니다.
각 집을 빨강으로 칠할 때 드는 비용, 초록으로 칠할 때 드는 비용, 파랑으로 드는 비용이 주어질 때, 모든 집을 칠하는 비용의 최솟값을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 집의 수 N이 주어진다. N은 1,000보다 작거나 같다. 둘째 줄부터 N개의 줄에 각 집을 빨강으로, 초록으로, 파랑으로 칠하는 비용이 주어진다. 비용은 1,000보다 작거나 같은 자연수이다.
출력
첫째 줄에 모든 집을 칠하는 비용의 최솟값을 출력한다.
예제 입력 1 복사
3 26 40 83 49 60 57 13 89 99
예제 출력 1 복사
96
출처
<실패 풀이>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
#include<stdio.h>
#include<algorithm>
enum Color{R=0,G,B};
using namespace std;
int main(void)
{
int get_cost[1001][B+1];
int house_count;
scanf("%d", &house_count);
for (unsigned short i = 0; i < house_count; ++i)
{
for (unsigned short k = 0; k < B + 1; ++k)
{
scanf("%d", &get_cost[i][k]);
}
}
// get_cost -> 입력 R,G,B 값
// result_sum -> 최소비용 축적되는 값들. { R0[0] G0[1] B0[2]}
// R1[0] G1[1] B1[2]}
// R2[0] G2[1] B2[2]}
//
int temp = 0;
int stack = 0;
temp = min({ get_cost[0][R], get_cost[0][G], get_cost[0][B] });
stack = temp;
for (unsigned short i = 0; i < house_count-1; ++i)
{
if (temp == get_cost[i][R])
{
temp = min(get_cost[i + 1][G], get_cost[i + 1][B]);
stack += temp;
}
else if (temp == get_cost[i][G])
{
temp = min(get_cost[i + 1][R], get_cost[i + 1][B]);
stack += temp;
}
else if (temp == get_cost[i][B])
{
temp = min(get_cost[i + 1][R], get_cost[i + 1][G]);
stack += temp;
}
}
//
printf("%d\n", stack);
return 0;
}
|
cs |
<신규 풀이>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
#include<stdio.h>
#include<algorithm>
enum Color{R=0,G,B};
using namespace std;
int get_cost[1001][3];
int d[1001][3];
int main(void)
{
int house_count;
scanf("%d", &house_count);
for (unsigned short i = 1; i <= house_count; ++i)
{
for (unsigned short k = 0; k < 3; ++k)
{
scanf("%d", &get_cost[i][k]);
}
}
for (int i = 1; i <= house_count; i++)
{
d[i][R] = min(d[i - 1][G], d[i - 1][B]) + get_cost[i][R];
d[i][G] = min(d[i - 1][R], d[i - 1][B]) + get_cost[i][G];
d[i][B] = min(d[i - 1][R], d[i - 1][G]) + get_cost[i][B];
}
//
printf("%d\n", min({ d[house_count][R],
d[house_count][G],
d[house_count][B] }));
return 0;
}
|
cs |
300x250
'Algorithm > 동적계획법(DP)' 카테고리의 다른 글
10844 쉬운 계단수 (0) | 2020.03.17 |
---|---|
11727 2 x n 타일링 2 (0) | 2020.03.17 |
2579 계단 오르기 (0) | 2020.01.22 |
9095 1,2,3 더하기 (0) | 2020.01.20 |
11726 2xn타일링 (0) | 2020.01.20 |
댓글