다이나믹 프로그래밍 1 (도전)

sua·2022년 10월 23일
0

Baekjoon

목록 보기
160/161
post-thumbnail

17404번 RGB거리 2

문제


풀이

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int n = Integer.parseInt(br.readLine());
        int arr[][] = new int[n + 1][3];
        int dp[][] = new int[n + 1][3];
        int INF = 1_000 * 1_000;
        int answer = INF;

        for(int i = 1; i <= n; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            for(int j = 0; j < 3; j++) {
                arr[i][j] = Integer.parseInt(st.nextToken());
            }
        }

        for(int i = 0; i < 3; i++) {
            for(int j = 0; j < 3; j++) {
                if(j == i) {
                    dp[1][j] = arr[1][j];
                } else {
                    dp[1][j] = INF;
                }
            }

            for(int j = 2; j<= n; j++) {
                dp[j][0] = Math.min(dp[j - 1][1], dp[j - 1][2]) + arr[j][0];
                dp[j][1] = Math.min(dp[j - 1][0], dp[j - 1][2]) + arr[j][1];
                dp[j][2] = Math.min(dp[j - 1][0], dp[j - 1][1]) + arr[j][2];
            }

            for(int j = 0; j < 3; j++) {
                if(j != i) {
                    answer = Math.min(answer, dp[n][j]);
                }
            }
        }

        bw.write(answer + "\n");
        bw.close();
        br.close();
    }
}
profile
가보자고

0개의 댓글