From 0ad045aaa1438e6f5c4386a1694da930eb207348 Mon Sep 17 00:00:00 2001 From: LiiNi-coder <97495437+LiiNi-coder@users.noreply.github.com> Date: Sun, 7 Sep 2025 23:50:40 +0900 Subject: [PATCH] =?UTF-8?q?[20250907]=20BOJ=20/=20G5=20/=20=EC=A0=81?= =?UTF-8?q?=EB=A1=9D=EC=83=89=EC=95=BD=20/=20=EC=9D=B4=EC=9D=B8=ED=9D=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...01\353\241\235\354\203\211\354\225\275.md" | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 "LiiNi-coder/202509/07 BOJ \354\240\201\353\241\235\354\203\211\354\225\275.md" diff --git "a/LiiNi-coder/202509/07 BOJ \354\240\201\353\241\235\354\203\211\354\225\275.md" "b/LiiNi-coder/202509/07 BOJ \354\240\201\353\241\235\354\203\211\354\225\275.md" new file mode 100644 index 00000000..4f2b6c2c --- /dev/null +++ "b/LiiNi-coder/202509/07 BOJ \354\240\201\353\241\235\354\203\211\354\225\275.md" @@ -0,0 +1,60 @@ +```java +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayDeque; + +public class Main { + private static final int[] dr = {-1, 0, 1, 0}; + private static final int[] dc = {0, 1, 0, -1}; + + public static void main(String[] args) throws IOException { + var br = new BufferedReader(new InputStreamReader(System.in)); + int n = Integer.parseInt(br.readLine()); + char[][] normal = new char[n][n]; + char[][] weak = new char[n][n]; + for (int i = 0; i < n; i++) { + String line = br.readLine(); + for (int j = 0; j < n; j++) { + char c = line.charAt(j); + normal[i][j] = c; + weak[i][j] = (c == 'G') ? 'R' : c; + } + } + int normalCount = countAreas(normal, n); + int weakCount = countAreas(weak, n); + + System.out.printf("%d %d\n", normalCount, weakCount); + } + private static int countAreas(char[][] map, int n) { + boolean[][] visited = new boolean[n][n]; + int count = 0; + var queue = new ArrayDeque(); + + for (int r = 0; r < n; r++) { + for (int c = 0; c < n; c++) { + if (visited[r][c]) + continue; + char color = map[r][c]; + count++; + visited[r][c] = true; + queue.offer(new int[] {r, c}); + while (!queue.isEmpty()) { + int[] now = queue.poll(); + for (int d = 0; d < 4; d++) { + int nr = now[0] + dr[d]; + int nc = now[1] + dc[d]; + if (nr >= 0 && nr < n && nc >= 0 && nc < n + && !visited[nr][nc] + && map[nr][nc] == color) { + visited[nr][nc] = true; + queue.offer(new int[] {nr, nc}); + } + } + } + } + } + return count; + } +} +```