본문 바로가기
컴퓨터 공학/백준

[백준] JAVA 자바 : RGB거리 (1149번)

by kim-dev 2024. 1. 23.
반응형


N개의 집을 입력받으면, N개의 집 각각의 cost를 입력받아서 저장한다.


이 때, 당연히 코스트를 계산할 dp 배열도 선언해야 한다.
dp배열은 마지막이 red(1), green(2), blue(3) 중 어디로 저장되는지도 저장해야 하므로 이차원 배열으로 선언한다.

 

그리고 dp배열을 red green blue 각각 계산한다.
red(1)는 앞선 배열이 green(2)과 blue(3)으로 끝나는 경우에 r_cost를 더해서 계산하고,
green(2)는 앞선 배열이 red(1)과 blue(3)으로 끝나는 경우에 g_cost를 더해서 계산하며,
blue(3)는 앞선 배열이 red(1)과 green(2)으로 끝나는 경우에 b_cost를 더해서 계산한다.

 

그리고 계산된 배열의 N번째 요소들 중 가장 작은 값을 출력한다.

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

public class RGBStreet {

    public static int stoi(String str) {
        return Integer.parseInt(str);
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = stoi(br.readLine());
        int[][] dp = new int[N+1][4];
        int[] r_cost = new int[N+1];
        int[] g_cost = new int[N+1];
        int[] b_cost = new int[N+1];

        for (int i=1; i<=N; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine(), " ");
            r_cost[i] = stoi(st.nextToken());
            g_cost[i] = stoi(st.nextToken());
            b_cost[i] = stoi(st.nextToken());
        }

        dp[1][1] = r_cost[1];
        dp[1][2] = g_cost[1];
        dp[1][3] = b_cost[1];
        for (int i=2; i<=N; i++) {
            dp[i][1] = Math.min(dp[i-1][2]+r_cost[i], dp[i-1][3]+r_cost[i]);
            dp[i][2] = Math.min(dp[i-1][1]+g_cost[i], dp[i-1][3]+g_cost[i]);
            dp[i][3] = Math.min(dp[i-1][1]+b_cost[i], dp[i-1][2]+b_cost[i]);
        }

        System.out.println(Math.min(dp[N][1], Math.min(dp[N][2], dp[N][3])));
    }
}

 

 

로그인

 

www.acmicpc.net

 

 

작성일자: 2024-01-17