Algorithm/dynamic programming

[백준] 알고리즘 1149번 - RGB거리 문제

낭강 2021. 3. 11. 14:37
문제

소스코드
#include <bits/stdc++.h>
using namespace std;
int color[1001][3];
int dp[1001][3];
int main(){
   ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
   int n;
   cin >> n;
   for (int i = 1; i <= n; i++) {
	   cin >> color[i][0] >> color[i][1] >> color[i][2];
   }
   dp[1][0] = color[1][0], dp[1][1] = color[1][1], dp[1][2] = color[1][2];
   for (int i = 2; i <= n; i++) {
	   dp[i][0] = min(dp[i - 1][1], dp[i - 1][2]) + color[i][0];
	   dp[i][1] = min(dp[i - 1][0], dp[i - 1][2]) + color[i][1];
	   dp[i][2] = min(dp[i - 1][0], dp[i - 1][1]) + color[i][2];
   }
   int ans = 0;
   ans = min({ dp[n][0],dp[n][1],dp[n][2] });
   cout << ans;
}
풀이

1번집부터 N번집까지 차례대로 빨강 파랑 초록 순으로 비교하여 값들을 저장하게 되면

최종 N번째 집의 색깔들에는 각각의 경우의 수들의 최소값이 들어있을 것이다.

이를 마지막에 출력은 비교해줘서 정답을 출력해주면 된다.

 

3개 이상비교?? 를 할때는 min({}) 이걸 사용하면 된다.