diff --git "a/ksinji/202511/15 PGM \352\262\214\354\236\204 \353\247\265 \354\265\234\353\213\250\352\261\260\353\246\254.md" "b/ksinji/202511/15 PGM \352\262\214\354\236\204 \353\247\265 \354\265\234\353\213\250\352\261\260\353\246\254.md" new file mode 100644 index 00000000..189079c3 --- /dev/null +++ "b/ksinji/202511/15 PGM \352\262\214\354\236\204 \353\247\265 \354\265\234\353\213\250\352\261\260\353\246\254.md" @@ -0,0 +1,43 @@ +```java +import java.util.*; + +class Solution { + static final int[] dx = {1, -1, 0, 0}; + static final int[] dy = {0, 0, 1, -1}; + + public int solution(int[][] maps) { + int n = maps.length; + int m = maps[0].length; + + int[][] dist = new int[n][m]; + Queue q = new ArrayDeque<>(); + + dist[0][0] = 1; + q.offer(new int[]{0, 0}); + + while (!q.isEmpty()) { + int[] cur = q.poll(); + int x = cur[0], y = cur[1]; + + if (x == n - 1 && y == m - 1) { + return dist[x][y]; + } + + for (int dir = 0; dir < 4; dir++) { + int nx = x + dx[dir]; + int ny = y + dy[dir]; + + if (nx < 0 || ny < 0 || nx >= n || ny >= m) continue; + if (maps[nx][ny] == 0) continue; + if (dist[nx][ny] != 0) continue; + + dist[nx][ny] = dist[x][y] + 1; + q.offer(new int[]{nx, ny}); + } + } + + return -1; + } +} + +```