코딩고치

[백준][DP] RGB거리 본문

백준 알고리즘 기초/다이내믹 프로그래밍

[백준][DP] RGB거리

코딩고치 2020. 3. 12. 00:12

1. 문제주소

 

1149번: RGB거리

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

www.acmicpc.net

2. 문제

다음 문제의 조건에 맞게 N개의 집을 빨강, 초록, 파랑으로 색칠할 때 최소 비용을 구하는 문제이다. 2차원 배열을 이용하여 각각의 집을 색칠을 할 때 색깔별로 드는 비용을 입력을 한다. 그 후 마지막 집을 빨강, 초록, 파랑으로 색칠을 할 때 드는 최소 비용을 각각 구한 후 이 세개의 최솟값을 출력을 해주면 된다.

 

3. 소스코드

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
#include <iostream>
#include <algorithm>
using namespace std;
int color_price[1001][3];
int min_price[1001][3];
 
int main() {
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        for (int j = 0; j < 3; j++) {
            cin >> color_price[i][j];
            // j = 0 : red, j = 1 : green, j = 2 : blue
        }
    }
 
    for (int i = 1; i <= n; i++) {
        min_price[i][0= min(min_price[i - 1][1], min_price[i - 1][2]) + color_price[i][0];
        min_price[i][1= min(min_price[i - 1][0], min_price[i - 1][2]) + color_price[i][1];
        min_price[i][2= min(min_price[i - 1][0], min_price[i - 1][1]) + color_price[i][2];
    }
 
    cout << min({ min_price[n][0], min_price[n][1], min_price[n][2] }) << '\n';
    return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
 

'백준 알고리즘 기초 > 다이내믹 프로그래밍' 카테고리의 다른 글

[백준][DP] 오르막 수  (0) 2020.03.22
[백준][DP] 동물원  (0) 2020.03.22
[백준][DP] 1, 2, 3 더하기 3  (0) 2019.11.26
[백준][DP] 합분해  (0) 2019.11.20
[백준][DP] 제곱수의 합  (0) 2019.11.08
Comments