[백준] 1149 RGB거리 (실버 1)

AI·2025년 9월 18일

https://www.acmicpc.net/problem/1149

dp는 나의 현재 값에서 그 전 값을 무엇을 가져와야 할 것인가로 식을 정하면 됨.
2839번을 그리디가 아니라 dp로 풀면서 아이디어 떠오름

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        // 그 전의 집의 색과 동일하지 않으면 됨
        int[][] house = new int[n+1][3];
        int[][] dp = new int[n+1][3];

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

        dp[1][0] = house[1][0];
        dp[1][1] = house[1][1];
        dp[1][2] = house[1][2];

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

        if(dp[n][0]>=dp[n][1]){
            System.out.println(Math.min(dp[n][1],dp[n][2]));
        }else{
            System.out.println(Math.min(dp[n][0],dp[n][2]));
        }

    }
}

0개의 댓글