백준
1149번 RGB거리 / BOJ / acmicpc.net
건이두
2020. 1. 27. 22:35
728x90
문제링크 : https://www.acmicpc.net/problem/1149
제출링크 : https://www.acmicpc.net/source/17183603
i 가 집의 순서, j 가 색깔(RGB)라고 정의하면,
문제에서, 모든 이웃은 같은 색으로 칠할 수 없다. 그리고 i의 이웃은 i-1 과 i+1 이다. 라고 했는대요.
이부분에서 i-1과 i+1을 동시에 고려해야 하는 것으로, 오해를 할 수 있습니다.
주의 깊게 봐야할 부분이 모든 이웃 입니다. 즉, i-1 과 i 번째 집의 색이 다르기만 하면, 조건을 만족 시킬 수 있습니다.
따라서, i+1은 고려하지 않아도, 위의 조건을 만족시킬 수 있습니다.
점화식(Recurrence Relation)은 아래와 같이 만들 수 있습니다. 앞집(i-1)과 색이 달라야 하기 때문에
\begin{aligned}
1 \leq i \leq N \\
1 \leq j \leq 3 \\
dp_{i,1} = dp_{i,1} + min(dp_{i-1,2}, dp_{i-1,3}) \\
dp_{i,2} = dp_{i,2} + min(dp_{i-1,1}, dp_{i-1,3}) \\
dp_{i,3} = dp_{i,3} + min(dp_{i-1,1}, dp_{i-1,2}) \\
\end{aligned}
import java.util.Scanner;
public class Main {
public void solve() {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int[][] c = new int[N][3];
for(int i=0; i<N; ++i) {
c[i][0] = sc.nextInt();
c[i][1] = sc.nextInt();
c[i][2] = sc.nextInt();
}
for(int i=1; i<N; ++i) {
c[i][0] += Math.min(c[i-1][1], c[i-1][2]);
c[i][1] += Math.min(c[i-1][0], c[i-1][2]);
c[i][2] += Math.min(c[i-1][0], c[i-1][1]);
}
int r = Math.min(c[N-1][0], c[N-1][1]);
r = Math.min(c[N-1][2], r);
System.out.println(r);
}
public static void main(String[] args) {
Main main = new Main();
main.solve();
}
}
728x90