From 3857b0f4f27e1d5061617bbf6c8c64f372e186e0 Mon Sep 17 00:00:00 2001 From: Son-juyeong <102614018+Son-juyeong@users.noreply.github.com> Date: Wed, 19 Nov 2025 23:31:46 +0900 Subject: [PATCH] =?UTF-8?q?[SWEA]=20=ED=8C=8C=ED=95=91=ED=8C=8C=ED=95=91?= =?UTF-8?q?=20=EC=A7=80=EB=A2=B0=EC=B0=BE=EA=B8=B0=20/=20D4=20/=2080?= =?UTF-8?q?=EB=B6=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sonjuyeong.java" | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 "11\354\233\224/3\354\243\274\354\260\250/SWEA_1868_\355\214\214\355\225\221\355\214\214\355\225\221 \354\247\200\353\242\260\354\260\276\352\270\260/Sonjuyeong.java" diff --git "a/11\354\233\224/3\354\243\274\354\260\250/SWEA_1868_\355\214\214\355\225\221\355\214\214\355\225\221 \354\247\200\353\242\260\354\260\276\352\270\260/Sonjuyeong.java" "b/11\354\233\224/3\354\243\274\354\260\250/SWEA_1868_\355\214\214\355\225\221\355\214\214\355\225\221 \354\247\200\353\242\260\354\260\276\352\270\260/Sonjuyeong.java" new file mode 100644 index 0000000..ce823e5 --- /dev/null +++ "b/11\354\233\224/3\354\243\274\354\260\250/SWEA_1868_\355\214\214\355\225\221\355\214\214\355\225\221 \354\247\200\353\242\260\354\260\276\352\270\260/Sonjuyeong.java" @@ -0,0 +1,82 @@ +import java.io.*; +import java.util.*; + +public class Sonjuyeong { + + static int[] dr = {0, 1, 1, 1, 0, -1, -1, -1}; + static int[] dc = {1, 1, 0, -1, -1, -1, 0, 1}; + + public static void main(String[] args) throws Exception { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + int T = Integer.parseInt(br.readLine()); + StringBuilder sb = new StringBuilder(); + for (int tc = 1; tc <= T; tc++) { + sb.append("#").append(tc).append(" "); + int N = Integer.parseInt(br.readLine()); + char[][] arr = new char[N][N]; + for (int i = 0; i < N; i++) { + String str = br.readLine(); + for (int j = 0; j < N; j++) { + arr[i][j] = str.charAt(j); + } + } + int answer = 0; + boolean[][] visited = new boolean[N][N]; + for (int i = 0; i < N; i++) { + for (int j = 0; j < N; j++) { + if (arr[i][j] == '.' && !visited[i][j]) { + boolean hasBomb = false; + for (int k = 0; k < 8; k++) { + int r = i + dr[k]; + int c = j + dc[k]; + if (r >= 0 && r < N && c >= 0 && c < N && arr[r][c] == '*') { + hasBomb = true; + break; + } + } + if (!hasBomb) { + ++answer; + visited[i][j] = true; + Queue q = new ArrayDeque<>(); + q.offer(new int[]{i, j}); + while (!q.isEmpty()) { + int[] cur = q.poll(); + for (int k = 0; k < 8; k++) { + int r = cur[0] + dr[k]; + int c = cur[1] + dc[k]; + if (r < 0 || r >= N || c < 0 || c >= N) continue; + if (visited[r][c]) continue; + hasBomb = false; + for (int l = 0; l < 8; l++) { + int newR = r + dr[l]; + int newC = c + dc[l]; + if (newR >= 0 && newR < N && newC >= 0 && newC < N && !visited[newR][newC]) { + if (arr[newR][newC] == '*') { + hasBomb = true; + break; + } + } + } + visited[r][c] = true; + if (!hasBomb) { + q.offer(new int[]{r, c}); + } + } + } + } + } + } + } + + for (int i = 0; i < N; i++) { + for (int j = 0; j < N; j++) { + if (!visited[i][j] && arr[i][j] == '.') + ++answer; + } + } + + sb.append(answer).append("\n"); + } + System.out.println(sb); + } +}