From 7ba8cdf3c82c10ad56490808de0741efa5777049 Mon Sep 17 00:00:00 2001 From: Kim Daekyu <82073780+ByeolNabi@users.noreply.github.com> Date: Fri, 14 Nov 2025 09:10:57 +0900 Subject: [PATCH 1/2] =?UTF-8?q?[BOJ]=20=EC=95=84=EA=B8=B0=EC=83=81?= =?UTF-8?q?=EC=96=B42=20/=20=EC=8B=A4=EB=B2=842=20/=2040=EB=B6=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 여러명의 상어가 있고 각 블럭에 대해서 상어와의 거리를 구하는 문제입니다. 그 중에서 최대 거리를 구해야합니다. 처음에 여러명의 상어를 한 번에 queue에 넣어서 bfs를 하면 되겠다 라고 생각했습니다. 그 이후 visited만 있어도 된다는 생각에 아기상어의 위치를 만날때마다 queue에 넣어서 map을 생략하고 진행했습니다. map을 생략했기때문에 visited에서 거리를 저장해야하지 않을까. 라고 생각했지만 그려면 visited를 다 순회해서 최댓값을 찾아야하기 때문에 maxDistance변수를 만들어서 방문할때마다 최대 거리를 저장하는 방식으로 진행했습니다. 감사합니다. --- .../ByeolNabi.java" | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 "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" 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); + + } +} From c39c650439ab449d3995a716fe6d1b32476b9433 Mon Sep 17 00:00:00 2001 From: Kim Daekyu <82073780+ByeolNabi@users.noreply.github.com> Date: Thu, 20 Nov 2025 02:16:14 +0900 Subject: [PATCH 2/2] =?UTF-8?q?[SWEA]=20=ED=8C=8C=ED=95=91=ED=8C=8C?= =?UTF-8?q?=ED=95=91=20=EC=A7=80=EB=A2=B0=EC=B0=BE=EA=B8=B0=20/=20D4=20/?= =?UTF-8?q?=2090=EB=B6=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ByeolNabi.java" | 141 ++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 "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" 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 +..*.. +..*.. +.*..* +.*... +.*... + +*/