[C++]BOJ 1149 - RGB거리

[C++]BOJ 1149 - RGB거리

규칙이 헷갈리는데 요약하면 같은 색인 집이 연속되면 안 된다고 정리할 수 있다.
따라서 색(r, g, b)별로 n번째 집까지 색을 칠하는 비용의 최소값은 n - 1번째 집까지의 비용에서 현재 집의 색을 제외한 나머지 색 중 최소값이 될 것이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <algorithm>
using namespace std;
int n, r, g, b, dp[1001][3];
int main() {
cin >> n;
for(int i = 1; i <= n; i++) {
cin >> r >> g >> b;
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;
}
cout << min(min(dp[n][0], dp[n][1]), dp[n][2]);
}