Skip to content

Commit 0b77c57

Browse files
authored
[20250805] BOJ / G5 / 진우의 달 여행 (Large) / 이인희
1 parent 35c6929 commit 0b77c57

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
```java
2+
import java.io.BufferedReader;
3+
import java.io.IOException;
4+
import java.io.InputStreamReader;
5+
6+
public class Main {
7+
private static BufferedReader br;
8+
9+
public static void main(String[] args) throws IOException {
10+
br = new BufferedReader(new InputStreamReader(System.in));
11+
String[] temp = br.readLine().split(" ");
12+
int n = Integer.parseInt(temp[0]);
13+
int m = Integer.parseInt(temp[1]);
14+
15+
int[][] map = new int[n][m];
16+
for (int i = 0; i < n; i++) {
17+
temp = br.readLine().split(" ");
18+
for (int j = 0; j < m; j++) {
19+
map[i][j] = Integer.parseInt(temp[j]);
20+
}
21+
}
22+
23+
int[][][] dp = new int[n][m + 2][3];
24+
int INF = Integer.MAX_VALUE;
25+
26+
for (int c = 1; c <= m; c++) {
27+
for (int d = 0; d < 3; d++) {
28+
dp[0][c][d] = map[0][c - 1]; // map은 0-based
29+
}
30+
}
31+
for (int r = 1; r < n; r++) {
32+
for (int c = 1; c <= m; c++) {
33+
for (int dc : new int[] { -1, 0, 1 }) {
34+
int dp2index = dc + 1;
35+
int targetC = c + dc;
36+
if (targetC < 1 || targetC > m) {
37+
dp[r][c][dp2index] = INF;
38+
continue;
39+
}
40+
41+
int minPrev = INF;
42+
for (int prevD = 0; prevD < 3; prevD++) {
43+
if (prevD == dp2index) continue; // 같은 방향 연속 이동 금지
44+
minPrev = Math.min(minPrev, dp[r - 1][targetC][prevD]);
45+
}
46+
if (minPrev == INF)
47+
dp[r][c][dp2index] = INF;
48+
else
49+
dp[r][c][dp2index] = minPrev + map[r][c - 1];
50+
}
51+
}
52+
}
53+
54+
int answer = INF;
55+
for (int c = 1; c <= m; c++) {
56+
for (int d = 0; d < 3; d++) {
57+
answer = Math.min(answer, dp[n - 1][c][d]);
58+
}
59+
}
60+
System.out.println(answer);
61+
}
62+
}
63+
```

0 commit comments

Comments
 (0)