RGB거리(1149)
i번째 집을 각각의 색으로 칠할 때, i-1번째 집을 모두 칠하는 최소 비용으로 부분문제
Last updated
i번째 집을 각각의 색으로 칠할 때, i-1번째 집을 모두 칠하는 최소 비용으로 부분문제
Last updated
3
26 40 83
49 60 57
13 89 9996import java.io.*;
import java.util.*;
public class Main{
static int arr[][];
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
arr = new int[N][3];
for(int i=0; i<N; i++){
st = new StringTokenizer(br.readLine(), " ");
for (int j = 0; j < 3; j++) {
arr[i][j] = Integer.parseInt(st.nextToken());
}
}
for(int i=1; i<N; i++){
arr[i][0] = Math.min(arr[i-1][1], arr[i-1][2])+arr[i][0];
arr[i][1] = Math.min(arr[i-1][0], arr[i-1][2])+arr[i][1];
arr[i][2] = Math.min(arr[i-1][0], arr[i-1][1])+arr[i][2];
}
System.out.println(Math.min(arr[N-1][0], Math.min(arr[N-1][1], arr[N-1][2])));
}
}import java.util.*;
import java.io.*;
public class Main{
public static void main(String[] args) throws Exception{
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
int n = Integer.parseInt(bf.readLine());
int[][] dp = new int[n][3];
int[][] cnt = new int[n][3];
for(int i=0; i<n; i++){
st = new StringTokenizer(bf.readLine(), " ");
dp[i][0] = Integer.parseInt(st.nextToken());
dp[i][1] = Integer.parseInt(st.nextToken());
dp[i][2] = Integer.parseInt(st.nextToken());
}
cnt[0][0] = dp[0][0];
cnt[0][1] = dp[0][1];
cnt[0][2] = dp[0][2];
for(int i=1; i<n; i++){
cnt[i][0] = Math.min(cnt[i-1][1], cnt[i-1][2]) + dp[i][0];
cnt[i][1] = Math.min(cnt[i-1][0], cnt[i-1][2]) + dp[i][1];
cnt[i][2] = Math.min(cnt[i-1][0], cnt[i-1][1]) + dp[i][2];
}
sb.append(Math.min(Math.min(cnt[n-1][0], cnt[n-1][1]), cnt[n-1][2]));
System.out.println(sb);
}
}