๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm๐Ÿฐ/๋ฐฑ์ค€

[๋ฐฑ์ค€] 1149 RGB ๊ฑฐ๋ฆฌ DP

by Jouureee 2021. 5. 8.

ใ…‡๋ฌธ์ œ :

www.acmicpc.net/problem/1149

 

1149๋ฒˆ: RGB๊ฑฐ๋ฆฌ

์ฒซ์งธ ์ค„์— ์ง‘์˜ ์ˆ˜ N(2 ≤ N ≤ 1,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ ์ง‘์„ ๋นจ๊ฐ•, ์ดˆ๋ก, ํŒŒ๋ž‘์œผ๋กœ ์น ํ•˜๋Š” ๋น„์šฉ์ด 1๋ฒˆ ์ง‘๋ถ€ํ„ฐ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ฃผ์–ด์ง„๋‹ค. ์ง‘์„ ์น ํ•˜๋Š” ๋น„์šฉ์€ 1,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜

www.acmicpc.net

 

๋ถ„์„ :

rgb ์ƒ‰๊น”์„ ์–‘ ์˜† ์ง‘๋งˆ๋‹ค ๊ฒน์น˜์ง€ ์•Š๊ฒŒ ์ƒ‰์น ํ•˜๋Š”๋ฐ ๊ทธ ์ตœ์†Œ ๋น„์šฉ์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ๋‹ค.

dp ๋ฐฐ์—ด์€ 2์ฐจ์› ๋ฐฐ์—ด๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ dp[i][0], dp[i][1], dp[i][2]๋Š” ๊ฐ๊ฐ i๋ฒˆ์งธ ์ง‘๊นŒ์ง€ ์ƒ‰์น ํ• ๋•Œ 0-๋นจ๊ฐ„์ƒ‰ ์ตœ์†Œ ๋น„์šฉ,1-๋…ธ๋ž€์ƒ‰ ์ตœ์†Œ ๋น„์šฉ,2-ํŒŒ๋ž€์ƒ‰ ์ตœ์†Œ ๋น„์šฉ์„ ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” ๋ฐฐ์—ด์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด dp[1][1]์€ ์ด์ „ 0๋ฒˆ์งธ ์ง‘์„ ์ƒ‰์น ํ• ๋•Œ ๋“œ๋Š” ์ตœ์†Œ ๋น„์šฉ์— ์ง€๊ธˆ ์ž์‹ ์˜ 1๋ฒˆ์งธ ์ง‘์„ ๋…ธ๋ž€์ƒ‰์œผ๋กœ ์ƒ‰์น ํ•˜๋Š” ๊ฒƒ๊นŒ์ง€ ๊ณ„์‚ฐ๋œ ๋น„์šฉ์„ ์˜๋ฏธํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” dp์˜ ๋งˆ์ง€๋ง‰ ์ค„(N)์˜ ์ตœ์†Œ๊ฐ’์„ ๊ตฌํ•˜๋ฉด 1 ~ N๊นŒ์ง€ ์ƒ‰์น ํ•˜๋Š”๋ฐ ๋“œ๋Š” ์ตœ์†Œ ๋น„์šฉ์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

c++ ์ฝ”๋“œ :

//
//  1149_rgb.cpp
//  SOMA๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป
//
//  Created by JoSoJeong on 2021/04/23.
//

#include <stdio.h>
#include <iostream>
#include <math.h>
#include <algorithm>

using namespace std;
int arr[1001][3]; // rgb3
int dp[1001][3];
int N;

void make_rgb_paint(){
    dp[0][0] = arr[0][0];
    dp[0][1] = arr[0][1];
    dp[0][2] = arr[0][2];
    
    for(int i = 1; i < N; i++){
        dp[i][0] = min(dp[i-1][1], dp[i-1][2]) + arr[i][0];
        dp[i][1] = min(dp[i-1][0], dp[i-1][2]) + arr[i][1];
        dp[i][2] = min(dp[i-1][0], dp[i-1][1]) + arr[i][2];
    }
    
    int ans = min(min(dp[N-1][0],dp[N-1][1]),dp[N-1][2]);
    cout << ans << '\n';
    
}

int main(){
    cin >> N;
    for(int i = 0; i < N; i++){
        for(int j = 0; j< 3; j++){
            cin >> arr[i][j];
        }
    }
    
    make_rgb_paint();
    return 0;
}

๋Œ“๊ธ€