Skip to content

Commit b9af99c

Browse files
authored
[20251207] BOJ / G5 / 진우의 달 여행 (Large) / 이강현
1 parent 8f659b6 commit b9af99c

File tree

1 file changed

+65
-0
lines changed

1 file changed

+65
-0
lines changed
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
```java
2+
import java.util.*;
3+
import java.io.*;
4+
public class Main{
5+
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
6+
static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
7+
static StringTokenizer st;
8+
9+
static int N,M;
10+
static int[][] table;
11+
static int[][][] dp;
12+
public static void main(String[] args) throws Exception{
13+
st = new StringTokenizer(br.readLine());
14+
N = Integer.parseInt(st.nextToken());
15+
M = Integer.parseInt(st.nextToken());
16+
table = new int[N][M];
17+
18+
for (int i = 0; i < N; i++) {
19+
st = new StringTokenizer(br.readLine());
20+
for (int j = 0; j < M; j++) {
21+
table[i][j] = Integer.parseInt(st.nextToken());
22+
}
23+
}
24+
25+
dp = new int[N][M][3];
26+
27+
for (int i = 0; i < N; i++) {
28+
for (int j = 0; j < M; j++) {
29+
Arrays.fill(dp[i][j],Integer.MAX_VALUE);
30+
}
31+
}
32+
33+
dp[0][0][1] = table[0][0];
34+
dp[0][0][2] = table[0][0];
35+
for (int i = 1; i < M-1; i++) {
36+
for (int j = 0; j < 3; j++) {
37+
dp[0][i][j] = table[0][i];
38+
}
39+
}
40+
dp[0][M-1][0] = table[0][M-1];
41+
dp[0][M-1][1] = table[0][M-1];
42+
43+
for (int i = 1; i < N; i++) {
44+
dp[i][0][1] = dp[i-1][0][2] + table[i][0];
45+
dp[i][0][2] = Math.min(dp[i-1][1][0],dp[i-1][1][1]) + table[i][0];
46+
for (int j = 1; j < M-1; j++) {
47+
dp[i][j][0] = Math.min(dp[i-1][j-1][1],dp[i-1][j-1][2]) + table[i][j];
48+
dp[i][j][1] = Math.min(dp[i-1][j][0],dp[i-1][j][2]) + table[i][j];
49+
dp[i][j][2] = Math.min(dp[i-1][j+1][0],dp[i-1][j+1][1]) + table[i][j];
50+
}
51+
dp[i][M-1][0] = Math.min(dp[i-1][M-2][1],dp[i-1][M-2][2]) + table[i][M-1];
52+
dp[i][M-1][1] = dp[i-1][M-1][0] + table[i][M-1];
53+
}
54+
55+
int ans = Integer.MAX_VALUE;
56+
for (int i = 0; i < M; i++) {
57+
for (int j = 0; j < 3; j++) {
58+
ans = Math.min(ans,dp[N-1][i][j]);
59+
}
60+
}
61+
bw.write(ans+"");
62+
bw.close();
63+
}
64+
}
65+
```

0 commit comments

Comments
 (0)