From 1fec3bfd34a1983fc0ed0bb8a85dc367be394271 Mon Sep 17 00:00:00 2001 From: JHLEE325 <82587652+JHLEE325@users.noreply.github.com> Date: Fri, 20 Mar 2026 21:58:41 +0900 Subject: [PATCH] =?UTF-8?q?[20260320]=20BOJ=20/=20G3=20/=20=EB=8B=A4?= =?UTF-8?q?=EB=A6=AC=20=EB=A7=8C=EB=93=A4=EA=B8=B0=20/=20=EC=9D=B4?= =?UTF-8?q?=EC=A4=80=ED=9D=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...4 \353\247\214\353\223\244\352\270\260.md" | 101 ++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 "JHLEE325/202603/20 BOJ G3 \353\213\244\353\246\254 \353\247\214\353\223\244\352\270\260.md" diff --git "a/JHLEE325/202603/20 BOJ G3 \353\213\244\353\246\254 \353\247\214\353\223\244\352\270\260.md" "b/JHLEE325/202603/20 BOJ G3 \353\213\244\353\246\254 \353\247\214\353\223\244\352\270\260.md" new file mode 100644 index 00000000..bf4f940f --- /dev/null +++ "b/JHLEE325/202603/20 BOJ G3 \353\213\244\353\246\254 \353\247\214\353\223\244\352\270\260.md" @@ -0,0 +1,101 @@ +```java +import java.io.*; +import java.util.*; + +public class Main { + + static int N; + static int[][] map; + static boolean[][] visited; + static int[] dx = {-1, 1, 0, 0}; + static int[] dy = {0, 0, -1, 1}; + static int minDist = Integer.MAX_VALUE; + + public static void main(String[] args) throws Exception { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + N = Integer.parseInt(br.readLine()); + map = new int[N][N]; + visited = new boolean[N][N]; + + for (int i = 0; i < N; i++) { + StringTokenizer st = new StringTokenizer(br.readLine()); + for (int j = 0; j < N; j++) { + map[i][j] = Integer.parseInt(st.nextToken()); + } + } + + int islandIdx = 2; + for (int i = 0; i < N; i++) { + for (int j = 0; j < N; j++) { + if (map[i][j] == 1) { + numbering(i, j, islandIdx++); + } + } + } + + for (int i = 2; i < islandIdx; i++) { + bfs(i); + } + + System.out.println(minDist); + } + + static void numbering(int r, int c, int idx) { + Deque q = new ArrayDeque<>(); + q.add(new int[]{r, c}); + map[r][c] = idx; + visited[r][c] = true; + + while (!q.isEmpty()) { + int[] cur = q.poll(); + for (int i = 0; i < 4; i++) { + int nx = cur[0] + dx[i]; + int ny = cur[1] + dy[i]; + if (nx >= 0 && nx < N && ny >= 0 && ny < N && !visited[nx][ny] && map[nx][ny] == 1) { + visited[nx][ny] = true; + map[nx][ny] = idx; + q.add(new int[]{nx, ny}); + } + } + } + } + + static void bfs(int curIdx) { + Deque q = new ArrayDeque<>(); + boolean[][] check = new boolean[N][N]; + + for (int i = 0; i < N; i++) { + for (int j = 0; j < N; j++) { + if (map[i][j] == curIdx) { + check[i][j] = true; + q.add(new int[]{i, j, 0}); + } + } + } + + while (!q.isEmpty()) { + int[] cur = q.poll(); + int r = cur[0]; + int c = cur[1]; + int dist = cur[2]; + + if (dist >= minDist) break; + + for (int i = 0; i < 4; i++) { + int nx = r + dx[i]; + int ny = c + dy[i]; + + if (nx >= 0 && nx < N && ny >= 0 && ny < N && !check[nx][ny]) { + if (map[nx][ny] == 0) { + check[nx][ny] = true; + q.add(new int[]{nx, ny, dist + 1}); + } else if (map[nx][ny] != curIdx) { + minDist = Math.min(minDist, dist); + return; + } + } + } + } + } +} +```