반응형
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
'컴퓨터 공학 > 백준' 카테고리의 다른 글
[백준] JAVA 자바 : 오르막 수 (11057번) (0) | 2024.01.23 |
---|---|
[백준] JAVA 자바 : 동물원 (1309번) (0) | 2024.01.23 |
[백준] JAVA 자바 : 합분해 (2225번) (1) | 2024.01.23 |
[백준] JAVA 자바 : 연속합 (1912번) (0) | 2024.01.23 |
[백준] JAVA 자바 : 가장 긴 증가하는 부분 수열 4 (14002번) (0) | 2024.01.23 |