반응형
문제 |
코드 |
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
int[][] dp = new int[T+1][3];
for(int i=1; i<=T; i++)
{
dp[i][0] = sc.nextInt(); // red
dp[i][1] = sc.nextInt(); // green
dp[i][2] = sc.nextInt(); // blue
}
for(int i=2; i<=T; i++)
{
dp[i][0] += Math.min(dp[i-1][1], dp[i-1][2]);
dp[i][1] += Math.min(dp[i-1][0], dp[i-1][2]);
dp[i][2] += Math.min(dp[i-1][0], dp[i-1][1]);
}
System.out.println(Math.min(dp[T][0], Math.min(dp[T][1], dp[T][2])));
}
}
설명 |
현재 칠할 수 있는 색상이 빨강일 경우는 : dp[i][0]
1. 바이전에 초록색으로 칠했을 때 지금까지 칠한 비용 + 현재 빨강색으로 칠할 비용 : dp[i-1][1] + dp[i][0]
2. 바로 이전에 파랑색으로 칠했을 때 지금까지 칠한 비용 + 현재 빨강색으로 칠할 비용 : dp[i-1][2] + dp[i][0]
를 비교해서 최소값으로 선택한다.
마찬 가지로 현재 칠할 수 있는 색상이 초록색과 파랑색일 경우에는 그 외 다른 색상과 비교해서 최소값으로 선택한다.
출처 |
https://www.acmicpc.net/problem/1149
반응형
'알고리즘 > JAVA' 카테고리의 다른 글
[JAVA] 백준 알고리즘 2293 : 동전 1 (DP) (0) | 2019.03.31 |
---|---|
[JAVA] 백준 알고리즘 2839 : 설탕 배달 (0) | 2018.10.11 |
[JAVA] 백준 알고리즘 2156 : 포도주 (DP) (0) | 2018.10.11 |
[JAVA] 백준 알고리즘 1912 : 연속합 (DP) (0) | 2018.10.10 |
[JAVA] 백준 알고리즘 1920 : 수 찾기 (0) | 2018.09.20 |