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({}) 이걸 사용하면 된다.