-
1149번 RGB거리 / BOJ / acmicpc.net백준 2020. 1. 27. 22:35728x90
문제링크 : https://www.acmicpc.net/problem/1149
제출링크 : https://www.acmicpc.net/source/17183603i 가 집의 순서, 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'백준' 카테고리의 다른 글
9095번 1, 2, 3 더하기 / BOJ / acmicpc.net (0) 2020.01.27 2579번 계단 오르기 / BOJ / acmicpc.net (0) 2020.01.27 1463번 1로 만들기 / BOJ / acmicpc.net (0) 2020.01.27 1003번 피보나치 함수 / BOJ / acmicpc.net (0) 2020.01.27 13460번 구슬 탈출 2 / BOJ / acmicpc.net (0) 2020.01.27