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 |