반응형
https://www.acmicpc.net/problem/1149
풀이
1. 2차원 배열 Cost에 우선 해당하는 rgb에 비용 값을 모두 넣어줍니당.
2. Cost[i][0](red) 일 경우 Cost[i][1](green) Cost[i][2](blue) 중 최솟값을 더해줍니다.
0(Red) | 1(Green) | 2(Blue) |
Cost[0][0] | Cost[0][1] | Cost[0][2] |
Cost[1][0] += Min(Cost[0][1],Cost[0][2] 기존 값 + Min(0번째 G, 0번째 B) |
Cost[1][1] += Min(Cost[0][0],Cost[0][2] 기존 값 + Min(0번째 R, 0번째 B) |
Cost[1][2] += Min(Cost[0][0],Cost[0][1] 기존 값 + Min(0번째 R, 0번째 G) |
. | . | . |
. | . | . |
Cost[i][0] += Min(Cost[i-1][1],Cost[i-1][2] 기존 값 + Min(i-1번째 G, i-1번째 B) |
Cost[i][1] += Min(Cost[i-1][0],Cost[i-1][2] 기존 값 + Min(i-1번째 R, i-1번째 B) |
Cost[i][2] += Min(Cost[i-1][0],Cost[i-1][1] 기존 값 + Min(i-1번째 R, i-1번째 G) |
import java.io.*;
import java.util.*;
// dp
// weights에 2차원배열 값을 입력받고
// weights에 red,blue,green 3가지 경우로 나눠서 원래 값에서
// red 일 경우 weights[i-1]에 blue와 green 중 min 값을 더하
public class Main {
//paint 값 배열
static int[][] Cost;
public static void main(String[] args)throws Exception {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int N= sc.nextInt();
Cost= new int[N][3];
for(int i=0 ; i<N; i++) {
for(int j=0 ; j<3; j++) {
Cost[i][j] = sc.nextInt();
}
}
// 기존 값에서 다른 컬러의 최솟값 더해주기
for(int i=1 ; i<N ; i++) {
Cost[i][0] += Math.min(Cost[i-1][1],Cost[i-1][2]);
Cost[i][1] += Math.min(Cost[i-1][0],Cost[i-1][2]);
Cost[i][2] += Math.min(Cost[i-1][0],Cost[i-1][1]);
}
Arrays.sort(Cost[N-1]);
System.out.println(Cost[N-1][0]);
}
}
반응형
'알고리즘 > 문제 풀이' 카테고리의 다른 글
[JAVA/자바 백준 14502] 연구소 (0) | 2021.09.17 |
---|---|
[JAVA/자바 SWEA 3124] 최소 스패닝 트리 (0) | 2021.09.15 |
[JAVA/자바 10026 백준] 적록색약 (2) | 2021.08.25 |
[Java SWEA 1247] 최적 경로 (0) | 2021.08.19 |
[JAVA/자바 1992 백준] 쿼드트리 (0) | 2021.08.18 |