https://www.acmicpc.net/problem/17404
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int N;
static int[][] cost;
static int[][] dp;
public static void main(String[] args) throws Exception{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
N=Integer.parseInt(br.readLine());
cost=new int[N+1][3];
dp=new int[N+1][3];
for(int i=1; i<=N; i++) {
st=new StringTokenizer(br.readLine()," ");
for(int j=0; j<3; j++) {
cost[i][j]=Integer.parseInt(st.nextToken());
}
}
int min=98765432;
int total=cost[1][0]+cost[1][1]+cost[1][2];
dp[1][0]=cost[1][0];//1번집 R일때
dp[1][1]=total;
dp[1][2]=total;
for(int i=2; i<N; i++) {
dp[i][0]=Math.min(dp[i-1][1]+cost[i][0],dp[i-1][2]+cost[i][0]);
dp[i][1]=Math.min(dp[i-1][0]+cost[i][1],dp[i-1][2]+cost[i][1]);
dp[i][2]=Math.min(dp[i-1][0]+cost[i][2],dp[i-1][1]+cost[i][2]);
}
dp[N][1]=Math.min(dp[N-1][0]+cost[N][1],dp[N-1][2]+cost[N][1]);
dp[N][2]=Math.min(dp[N-1][0]+cost[N][2],dp[N-1][1]+cost[N][2]);
if(min>Math.min(dp[N][1], dp[N][2])) {
min = Math.min(dp[N][1], dp[N][2]);
}
dp[1][0]=total;//1번집 G일때
dp[1][1]=cost[1][1];
dp[1][2]=total;
for(int i=2; i<N; i++) {
dp[i][0]=Math.min(dp[i-1][1]+cost[i][0],dp[i-1][2]+cost[i][0]);
dp[i][1]=Math.min(dp[i-1][0]+cost[i][1],dp[i-1][2]+cost[i][1]);
dp[i][2]=Math.min(dp[i-1][0]+cost[i][2],dp[i-1][1]+cost[i][2]);
}
dp[N][0]=Math.min(dp[N-1][1]+cost[N][0],dp[N-1][2]+cost[N][0]);
dp[N][2]=Math.min(dp[N-1][0]+cost[N][2],dp[N-1][1]+cost[N][2]);
if(min>Math.min(dp[N][0], dp[N][2])) {
min = Math.min(dp[N][0], dp[N][2]);
}
dp[1][0]=total;
dp[1][1]=total;
dp[1][2]=cost[1][2];//1번집 B일때
for(int i=2; i<N; i++) {
dp[i][0]=Math.min(dp[i-1][1]+cost[i][0],dp[i-1][2]+cost[i][0]);
dp[i][1]=Math.min(dp[i-1][0]+cost[i][1],dp[i-1][2]+cost[i][1]);
dp[i][2]=Math.min(dp[i-1][0]+cost[i][2],dp[i-1][1]+cost[i][2]);
}
dp[N][0]=Math.min(dp[N-1][1]+cost[N][0],dp[N-1][2]+cost[N][0]);
dp[N][1]=Math.min(dp[N-1][0]+cost[N][1],dp[N-1][2]+cost[N][1]);
if(min>Math.min(dp[N][0], dp[N][1])) {
min = Math.min(dp[N][0], dp[N][1]);
}
System.out.println(min);
}
}
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준 1753] 최단경로(JAVA/C++) (0) | 2020.04.10 |
---|---|
[백준 2225] 합분해(JAVA) (0) | 2020.04.07 |
[백준 6087] 레이저 통신(JAVA) (0) | 2020.04.03 |
[백준 1072] 게임(JAVA) (2) | 2020.04.02 |
[백준 11725] 트리의부모찾기(JAVA) (0) | 2020.04.01 |
댓글