https://www.acmicpc.net/problem/1149
ํด๋น ๋ฌธ์ ๋ N๋ฒ์งธ ์ง์ ์์ N-1๋ฒ์งธ ์ง๊ณผ N+1๋ฒ์งธ ์ง์ ์๊ณผ ๊ฒน์น์ง ์๊ธฐ๋ง ํ๋ฉด ๋๊ธฐ์ ๊ฐ๋จํ Dynamic Programming์ผ๋ก ํ ์ ์๋ค.
๋ฌธ์ ํ์ด๋ ๋ค์๊ณผ ๊ฐ๋ค. ์์ ๋งํ๋ฏ์ด N๋ฒ์งธ ์ง์ N-1๋ฒ์งธ ์ง์ ์๊ณผ ๊ฒน์น์ง ์์ผ๋ฉด ๋๊ธฐ์ dp๋ฐฐ์ด์๋ ์์ ๊ณผ ๊ฐ์ ์ง์ ์ ์ธํ ์ด์ ๊น์ง ์ง์ ์น ํ ๋์ ์ต์ํ์ ๋น์ฉ+์๊ธฐ ์์ ์ ์ง์ ์น ํ ๋์ ๋น์ฉ์ ํฉ์ ๊ตฌํ์ฌ ๊ฐ๊ฐ์ dp๋ฐฐ์ด์ ์ฑ์์ฃผ๋ฉด ๋๋ค.
์ด๋ฌํ ํ์ด๋ฅผ ํ๋ฉด ๋ฐฐ์ด์ ๋์ RGB๊ฐ๋ค ์ค ์ต์๊ฐ์ด ์ต์ข ๊ฒฐ๊ณผ๊ฐ ๋๋ค.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[][] info = new int[N][3];
int[][] dp = new int[N][3];
for (int i=0; i<N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
for (int j=0; j<3; j++) {
info[i][j] = Integer.parseInt(st.nextToken());
}
}
// ์ฒซ๋ฒ์จฐ ์ง์ ์ ๋ณด ์ถ๊ฐ
for (int j=0; j<3; j++) dp[0][j] = info[0][j];
// ๋๋ฒ์งธ ์ดํ์ ์ง dp ๊ณ์ฐ
for (int i=1; i<N; i++) {
dp[i][0] = Math.min(dp[i-1][1], dp[i-1][2]) + info[i][0];
dp[i][1] = Math.min(dp[i-1][0], dp[i-1][2]) + info[i][1];
dp[i][2] = Math.min(dp[i-1][0], dp[i-1][1]) + info[i][2];
}
// ๋ชจ๋ ์ง์ ์น ํ์ ๋ ๊ฐ์ฅ ์ ์ ๋น์ฉ ๊ตฌํ๊ธฐ
int min = Integer.MAX_VALUE;
for (int i=0; i<3; i++) {
if(dp[N-1][i] < min) min = dp[N-1][i];
}
System.out.println(min);
}
}