File tree Expand file tree Collapse file tree 2 files changed +69
-0
lines changed
BOJ/[1149] RGB 거리/leegw217 Expand file tree Collapse file tree 2 files changed +69
-0
lines changed Original file line number Diff line number Diff line change 1+ # [ 1149] RGB 거리 - Java
2+
3+ ### :octocat: 분류
4+
5+ > DP
6+
7+ ### :octocat: 코드
8+
9+ ``` java
10+ import java.io.BufferedReader ;
11+ import java.io.InputStreamReader ;
12+ import java.util.StringTokenizer ;
13+
14+ public class week24_RGB 거리 {
15+ public static void main (String [] args ) throws Exception {
16+ BufferedReader br = new BufferedReader (new InputStreamReader (System . in));
17+ StringTokenizer st;
18+ int N = Integer . parseInt(br. readLine());
19+ int [] color = new int [3 ];
20+ int [][] dp = new int [N ][3 ];
21+
22+ for (int i= 0 ; i< N ; i++ ) {
23+ st = new StringTokenizer (br. readLine());
24+ for (int j= 0 ; j< 3 ; j++ ) color[j] = Integer . parseInt(st. nextToken());
25+ if (i == 0 ) for (int j= 0 ; j< 3 ; j++ ) dp[i][j] = color[j];
26+ else {
27+ dp[i][0 ] = Math . min(dp[i- 1 ][1 ], dp[i- 1 ][2 ]) + color[0 ];
28+ dp[i][1 ] = Math . min(dp[i- 1 ][0 ], dp[i- 1 ][2 ]) + color[1 ];
29+ dp[i][2 ] = Math . min(dp[i- 1 ][0 ], dp[i- 1 ][1 ]) + color[2 ];
30+ }
31+ }
32+ System . out. println(Math . min(dp[N - 1 ][0 ], Math . min(dp[N - 1 ][1 ], dp[N - 1 ][2 ])));
33+ }
34+ }
35+ ```
36+
37+ ### :octocat: 풀이 방법
38+
39+ 1 . n번째 B를 칠하는 값중 최솟값은 n-1에 R을 칠한경우와 G를 칠한경우 중 더 작은 값을 가진 경우에 B를 더한 값이다.
40+ 2 . 같은 방법으로 n번째에 R, G, B를 각각 칠한 경우 최솟값이 정답이 된다.
41+
42+ ### :octocat: 후기
43+
44+ dp는 아무리 오래 생각해도 안보이면 말짱 도루묵인듯..
Original file line number Diff line number Diff line change 1+ import java .io .BufferedReader ;
2+ import java .io .InputStreamReader ;
3+ import java .util .StringTokenizer ;
4+
5+ public class week24_RGB거리 {
6+ public static void main (String [] args ) throws Exception {
7+ BufferedReader br = new BufferedReader (new InputStreamReader (System .in ));
8+ StringTokenizer st ;
9+ int N = Integer .parseInt (br .readLine ());
10+ int [] color = new int [3 ];
11+ int [][] dp = new int [N ][3 ];
12+
13+ for (int i =0 ; i <N ; i ++) {
14+ st = new StringTokenizer (br .readLine ());
15+ for (int j =0 ; j <3 ; j ++) color [j ] = Integer .parseInt (st .nextToken ());
16+ if (i == 0 ) for (int j =0 ; j <3 ; j ++) dp [i ][j ] = color [j ];
17+ else {
18+ dp [i ][0 ] = Math .min (dp [i -1 ][1 ], dp [i -1 ][2 ]) + color [0 ];
19+ dp [i ][1 ] = Math .min (dp [i -1 ][0 ], dp [i -1 ][2 ]) + color [1 ];
20+ dp [i ][2 ] = Math .min (dp [i -1 ][0 ], dp [i -1 ][1 ]) + color [2 ];
21+ }
22+ }
23+ System .out .println (Math .min (dp [N -1 ][0 ], Math .min (dp [N -1 ][1 ], dp [N -1 ][2 ])));
24+ }
25+ }
You can’t perform that action at this time.
0 commit comments