https://www.acmicpc.net/problem/1149



이 문제의 포인트는 i번째가 빨강 색일 때 i-1번째의 파랑과 초록의 값 중에 작은 값을 고르는 문제이다.
첫 번째부터 n번째까지 각각 빨강,파랑,초록일 때 위에서 말한 것과 같이 작은 값을 선별하고 계속해서 더해나가는 문제이다.

코드자체는 특별히 어려운 부분이 없고 배열의 사이즈를 [n][3] 과 같은 이차원 배열로 잡은 후에
[n][0]일때 빨강, [n][1]일때 파랑, [n][2]일때 초록으로 입력 받고 곧바로 이전에 구한 값 중에서 작은 값을 더하는 식으로 진행하였다.

한가지 주의할 점은 for문에서 n번 진행할 때 i-1번째 값을 더해줘야 하기 때문에 처음에 i값을 0이 아닌, 1부터 시작하여 진행하였다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <algorithm>
using namespace std;
 
int main(){
    
    int n;
    int dp[1001][3]={0}; //[i][0]:R, [i][1]:G, [i][2]:B
    
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d%d%d",&dp[i][0],&dp[i][1],&dp[i][2]);
        
        dp[i][0]+=min(dp[i-1][1],dp[i-1][2]); //R
        dp[i][1]+=min(dp[i-1][0],dp[i-1][2]); //G
        dp[i][2]+=min(dp[i-1][0],dp[i-1][1]); //B
    }
    
    printf("%d",min(dp[n][0],min(dp[n][1],dp[n][2])));
    
    return 0;
}
cs





'알고리즘(BOJ) > DP' 카테고리의 다른 글

백준 2156번 - 포도주 시식  (0) 2018.01.25
백준 11726번 - 2xN 타일링  (0) 2018.01.25
백준 2193번 - 이친수  (0) 2018.01.25
백준 9095번 - 1,2,3 더하기  (0) 2018.01.25
백준 1463 - 1로 만들기  (2) 2018.01.24

+ Recent posts