BOJ_S1_1149
๐ [S1_1149] RGB๊ฑฐ๋ฆฌ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static StringTokenizer st;
static int[][] arr;
static int[][] dp;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// ์ง์ ์
int N = Integer.parseInt(br.readLine());
// ์
๋ ฅ ๊ฐ ์ ์ฅ ๋ฐฐ์ด
arr = new int[N][3];
// ๋ํ ๊ฐ์ ์ ์ฅํ ๋ฐฐ์ด
dp = 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());
}
}
// ์ด๊น๊ฐ ์ค์
dp[0][0] = arr[0][0];
dp[0][1] = arr[0][1];
dp[0][2] = arr[0][2];
// ์ ๋ณ๋ก ๊ฐ๊ฐ์ ์ต์ข
๊ฐ
long first = go(N - 1, 0);
long second = go(N - 1, 1);
long third = go(N - 1, 2);
// ์ต์๊ฐ ๊ตฌํ๊ธฐ
long res = Math.min(first, Math.min(second, third));
System.out.println(res);
}
// dp ๋ฐฐ์ด์ ๋ฃ๋ ๊ณผ์
static int go(int i, int j) {
// dp์ ๊ฐ์ด ์๋ ๊ฒฝ์ฐ if๋ฌธ์์ ๋ค์ด๊ฐ๊ณ dp์ ๊ฐ์ด ์๋ ๊ฒฝ์ฐ ๋ฐ๋ก ๊ฐ์ ธ์จ๋ค ( ๋ฉ๋ชจ์ด์ ์ด์
)
if (dp[i][j] == 0) {
if (j == 0) {
dp[i][j] = arr[i][j] + Math.min(go(i - 1, j + 1), go(i - 1, j + 2));
} else if (j == 1) {
dp[i][j] = arr[i][j] + Math.min(go(i - 1, j - 1), go(i - 1, j + 1));
} else {
dp[i][j] = arr[i][j] + Math.min(go(i - 1, j - 1), go(i - 1, j - 2));
}
}
return dp[i][j];
}
}
๐ค ๋์ ์๊ฐ
๊ทธ๋ฆผ์ ๊ทธ๋ ค์ ๋ณด๋ ํํฅ์ ์ ๊ทผ์ ํด์ผํด์ DP๋ฌธ์ ๋ผ๊ณ ์๊ฐํ๋ค.
๊ทธ๋์ ์ฒ์ ๊ฐ์ dp์ ๋ฃ์ด์ฃผ๊ณ go ๋ฉ์๋๋ฅผ ํตํด ๋ณธ์ธ ์ด์ ์๋ ๊ฐ์ ์ ์ธํ ๋๋จธ์ง ๋ dp ๊ฐ ์ค์ ์์ ๊ฒ์ ๊ฐ์ ธ์ ๋ณธ์ธ ๊ฐ์ด๋ ๋ํด dp ๊ฐ์ ๊ตฌํด์ฃผ์๋ค. ( go ๋ฉ์๋ ์ค๋ช
)
๋ง์ฝ dp ๋ฐฐ์ด์ ๊ฐ์ด ์์ผ๋ฉด ๋ฐ๋ก dp ๊ฐ์ ๋ฐํํด์ฃผ๊ณ ์์ผ๋ฉด ์์ ๋งํ ๊ณผ์ ์ ๋ฐ๋ณตํด์ฃผ์๋ค.