From b0cb4498ffac6778d31687370ff36e0414d865e7 Mon Sep 17 00:00:00 2001 From: lkhyun <102892446+lkhyun@users.noreply.github.com> Date: Mon, 25 Aug 2025 14:41:08 +0900 Subject: [PATCH] =?UTF-8?q?[20250825]=20BOJ=20/=20G3=20/=20=EB=B3=B4?= =?UTF-8?q?=EB=AC=BC=20=EC=B0=BE=EA=B8=B0=202=20/=20=EC=9D=B4=EA=B0=95?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...353\254\274 \354\260\276\352\270\260 2.md" | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 "lkhyun/202508/25 BOJ G3 \353\263\264\353\254\274 \354\260\276\352\270\260 2.md" diff --git "a/lkhyun/202508/25 BOJ G3 \353\263\264\353\254\274 \354\260\276\352\270\260 2.md" "b/lkhyun/202508/25 BOJ G3 \353\263\264\353\254\274 \354\260\276\352\270\260 2.md" new file mode 100644 index 00000000..2a8a02f3 --- /dev/null +++ "b/lkhyun/202508/25 BOJ G3 \353\263\264\353\254\274 \354\260\276\352\270\260 2.md" @@ -0,0 +1,79 @@ +```java +import java.util.*; +import java.io.*; + +public class Main{ + static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + static StringTokenizer st; + static StringBuilder sb = new StringBuilder(); + static int H,W; + static char[][] map; + static int starti,startj; + static int[] di = {-1,0,1,1,1,0,-1,-1}; + static int[] dj = {1,1,1,0,-1,-1,-1,0}; + + public static void main(String[] args) throws Exception { + st = new StringTokenizer(br.readLine()); + H = Integer.parseInt(st.nextToken()); + W = Integer.parseInt(st.nextToken()); + + map = new char[H][W]; + + for (int i = 0; i < H; i++) { + char[] line = br.readLine().toCharArray(); + for (int j = 0; j < W; j++) { + map[i][j] = line[j]; + if(line[j] == 'K'){ + starti = i; + startj = j; + } + } + } + + bw.write(BFS()+""); + bw.close(); + } + public static int BFS(){ + ArrayDeque q = new ArrayDeque<>(); + int[][] dist = new int[H][W]; + for (int i = 0; i < H; i++) { + Arrays.fill(dist[i], Integer.MAX_VALUE); + } + q.offer(new int[]{starti,startj,0}); + dist[starti][startj] = 0; + + while(!q.isEmpty()){ + int[] cur = q.poll(); + if(map[cur[0]][cur[1]] == '*') return dist[cur[0]][cur[1]]; + if(dist[cur[0]][cur[1]] < cur[2]) continue; + + for (int k = 0; k < 3; k++) { + int ni = cur[0] + di[k]; + int nj = cur[1] + dj[k]; + if(check(ni,nj)){ + if(dist[ni][nj] > cur[2]){ + q.addFirst(new int[]{ni,nj,cur[2]}); + dist[ni][nj] = cur[2]; + } + } + } + for (int k = 3; k < 8; k++) { + int ni = cur[0] + di[k]; + int nj = cur[1] + dj[k]; + if(check(ni,nj)){ + if(dist[ni][nj] > cur[2]+1){ + q.addLast(new int[]{ni,nj,cur[2]+1}); + dist[ni][nj] = cur[2]+1; + } + } + } + } + return -1; + } + public static boolean check(int i, int j){ + if(i < 0 || i >= H || j < 0 || j >= W || map[i][j] == '#') return false; + return true; + } +} +```