diff --git "a/11\354\233\224/1\354\243\274\354\260\250/BOJ_17086_\354\225\204\352\270\260\354\203\201\354\226\2642/ByeolNabi.java" "b/11\354\233\224/1\354\243\274\354\260\250/BOJ_17086_\354\225\204\352\270\260\354\203\201\354\226\2642/ByeolNabi.java" new file mode 100644 index 0000000..452c3a0 --- /dev/null +++ "b/11\354\233\224/1\354\243\274\354\260\250/BOJ_17086_\354\225\204\352\270\260\354\203\201\354\226\2642/ByeolNabi.java" @@ -0,0 +1,70 @@ +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.util.ArrayDeque; +import java.util.StringTokenizer; + +public class Main { + static int[] dy = { -1, -1, -1, 0, 1, 1, 1, 0 }; + static int[] dx = { -1, 0, 1, 1, 1, 0, -1, -1 }; + static int[][] visited; + + public static class Node { + int r, c, dist; + + public Node(int r, int c, int dist) { + super(); + this.r = r; + this.c = c; + this.dist = dist; + } + } + + public static void main(String[] args) throws Exception { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + StringTokenizer st = new StringTokenizer(br.readLine()); + int N, M; + N = Integer.parseInt(st.nextToken()); + M = Integer.parseInt(st.nextToken()); + + visited = new int[N][M]; + ArrayDeque q = new ArrayDeque(); + + for (int r = 0; r < N; r++) { + st = new StringTokenizer(br.readLine()); + + for (int c = 0; c < M; c++) { + int in = Integer.parseInt(st.nextToken()); + if (in == 1) { + q.add(new Node(r, c, 1)); + visited[r][c] = 1; + } + } + + } + + int max = 0; + while (!q.isEmpty()) { + Node crt = q.poll(); + + // 다음 탐색할 곳 찾기 + for (int i = 0; i < 8; i++) { + int nxt_r = crt.r + dy[i]; + int nxt_c = crt.c + dx[i]; + + if (0 > nxt_r || nxt_r >= N || 0 > nxt_c || nxt_c >= M) + continue; + + if (visited[nxt_r][nxt_c] == 0) { + visited[nxt_r][nxt_c] = crt.dist + 1; + q.offer(new Node(nxt_r, nxt_c, visited[nxt_r][nxt_c])); + + max = Math.max(max, visited[nxt_r][nxt_c]); + } + } + } + + System.out.println(max-1); + + } +} diff --git "a/11\354\233\224/3\354\243\274\354\260\250/\355\214\214\355\225\221\355\214\214\355\225\221 \354\247\200\353\242\260\354\260\276\352\270\260/ByeolNabi.java" "b/11\354\233\224/3\354\243\274\354\260\250/\355\214\214\355\225\221\355\214\214\355\225\221 \354\247\200\353\242\260\354\260\276\352\270\260/ByeolNabi.java" new file mode 100644 index 0000000..00d22d4 --- /dev/null +++ "b/11\354\233\224/3\354\243\274\354\260\250/\355\214\214\355\225\221\355\214\214\355\225\221 \354\247\200\353\242\260\354\260\276\352\270\260/ByeolNabi.java" @@ -0,0 +1,141 @@ +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.util.ArrayDeque; +import java.util.Arrays; + +public class Solution { + public static class Node { + int r, c; + + public Node(int r, int c) { + super(); + this.r = r; + this.c = c; + } + } + + static int[] dx = { -1, 0, 1, 1, 1, 0, -1, -1 }; + static int[] dy = { -1, -1, -1, 0, 1, 1, 1, 0 }; + static char[][] map; + static int[][] cnts; + static boolean[][] visited; + static int clicked; + static int N; + + public static void main(String[] args) throws Exception { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringBuilder sb = new StringBuilder(); + + int tc; + tc = Integer.parseInt(br.readLine()); + + for (int testcase = 1; testcase <= tc; testcase++) { + + N = Integer.parseInt(br.readLine()); + map = new char[N][N]; + cnts = new int[N][N]; + visited = new boolean[N][N]; + clicked = 0; + + for (int r = 0; r < N; r++) { + String s = br.readLine(); + for (int c = 0; c < N; c++) { + char ch = s.charAt(c); + if (ch == '.') { + map[r][c] = '.'; + } else { + map[r][c] = '*'; + for (int i = 0; i < 8; i++) { + int nxtR = r + dy[i]; + int nxtC = c + dx[i]; + + if (0 <= nxtR && nxtR < N && 0 <= nxtC && nxtC < N) { + ++cnts[nxtR][nxtC]; + } + } + } + } + } + + // 0인 부분 탐색하기 + for (int r = 0; r < N; r++) { + for (int c = 0; c < N; c++) { + if (visited[r][c] == false && map[r][c] == '.' && cnts[r][c] == 0) { // 하.... 폭탄이면서 cnt가 0인 곳 찾고있었어 띠 + bfs(r, c); + ++clicked; + } + } + } + +// for (int i = 0; i < N; i++) { +// System.out.println(Arrays.toString(visited[i])); +// } + + + for (int r = 0; r < N; r++) { + for (int c = 0; c < N; c++) { + if(visited[r][c] == false && map[r][c] == '.') { + ++clicked; + + } + } + } + + + + // for (int i = 0; i < N; i++) { + // System.out.println(Arrays.toString(visited[i])); + // } + // for (int i = 0; i < N; i++) { + // System.out.println(Arrays.toString(cnts[i])); + // } + + sb.append("#" + testcase + " " + clicked + "\n"); + + } + System.out.println(sb); + } + + static public int bfs(int r, int c) { + ArrayDeque q = new ArrayDeque(); + q.offer(new Node(r, c)); + visited[r][c] = true; + + while (!q.isEmpty()) { + Node crt = q.poll(); + + for (int i = 0; i < 8; i++) { + int nxtR = crt.r + dy[i]; + int nxtC = crt.c + dx[i]; + + // 경기장 안이면서 + if (0 <= nxtR && nxtR < N && 0 <= nxtC && nxtC < N && visited[nxtR][nxtC] == false) { + // 0인 부분이면 + if (cnts[nxtR][nxtC] == 0) { + q.offer(new Node(nxtR, nxtC)); + } + + visited[nxtR][nxtC] = true; + } + } + } + + return c; + } +} + +/* + +2 +3 +..* +..* +**. +5 +..*.. +..*.. +.*..* +.*... +.*... + +*/