ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • boj)1149 - RGB 거리
    PS/boj 2020. 9. 19. 01:41
    import java.io.*;
    import java.util.StringTokenizer;
    
    public class boj_1149 {
        static int[][] dp;
        static int[][] val; // 페인트 가격
        static StringTokenizer st;
        static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    
        public static void main(String[] args) throws IOException {
            int n = Integer.parseInt(br.readLine());
            dp = new int[n][3];
            val = new int[n][3];
    
            for (int i = 0; i < n; i++) {
                st = new StringTokenizer(br.readLine());
                val[i][0] = Integer.parseInt(st.nextToken()); // R
                val[i][1] = Integer.parseInt(st.nextToken()); // G
                val[i][2] = Integer.parseInt(st.nextToken()); // B
            }
    
            dp[0][0] = val[0][0]; dp[0][1] = val[0][1]; dp[0][2] = val[0][2];
            for (int i = 1; i < n; i++) {
                dp[i][0] = Math.min(dp[i-1][1], dp[i-1][2]) + val[i][0];
                dp[i][1] = Math.min(dp[i-1][0], dp[i-1][2]) + val[i][1];
                dp[i][2] = Math.min(dp[i-1][0], dp[i-1][1]) + val[i][2];
            }
    
            System.out.println(Math.min(Math.min(dp[n-1][0], dp[n-1][1]), dp[n-1][2]));
        }
    }
    

    - 다시 보니까 어려워 보이지 않는데 왜 생각이 딱 안떨어질까 ,,

     

    - 조건에서 연속 ? -> 이중배열이 떠오를 수 있다.

    - dp[i][0~2] => i번째가 0~2의 색깔일때 까지 페인트를 칠한 최솟값

    - i번째가 0으로 칠했다면, 그 전에 집은 1또는 2로 칠했다. 

    - dp[i-1][1], dp[i-1][2] 중 최솟값 + i번째 집의 페인트 가격

     

    'PS > boj' 카테고리의 다른 글

    boj)11057 - 오르막수  (0) 2020.09.19
    boj)1309 - 동물원  (0) 2020.09.19
    boj)2225 - 합분해  (0) 2020.09.18
    boj)1699 - 제곱수  (0) 2020.09.18
    boj)1912 - 연속합  (0) 2020.09.18
킹수빈닷컴