From fb5d88f33dcf5196ccff8e6f6caf255f7fa43671 Mon Sep 17 00:00:00 2001 From: Ukj0ng <90972240+Ukj0ng@users.noreply.github.com> Date: Tue, 25 Nov 2025 15:17:04 +0900 Subject: [PATCH] =?UTF-8?q?[20251125]=20BOJ=20/=20G1=20/=20=EC=9C=A0?= =?UTF-8?q?=EB=A0=B9=EC=9D=98=20=EC=A7=91=20=ED=83=88=EC=B6=9C=ED=95=98?= =?UTF-8?q?=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...10\354\266\234\355\225\230\352\270\260.md" | 104 ++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 "Ukj0ng/202511/25 BOJ G1 \354\234\240\353\240\271\354\235\230 \354\247\221 \355\203\210\354\266\234\355\225\230\352\270\260.md" diff --git "a/Ukj0ng/202511/25 BOJ G1 \354\234\240\353\240\271\354\235\230 \354\247\221 \355\203\210\354\266\234\355\225\230\352\270\260.md" "b/Ukj0ng/202511/25 BOJ G1 \354\234\240\353\240\271\354\235\230 \354\247\221 \355\203\210\354\266\234\355\225\230\352\270\260.md" new file mode 100644 index 00000000..919b26d6 --- /dev/null +++ "b/Ukj0ng/202511/25 BOJ G1 \354\234\240\353\240\271\354\235\230 \354\247\221 \355\203\210\354\266\234\355\225\230\352\270\260.md" @@ -0,0 +1,104 @@ +``` +import java.io.*; +import java.util.*; + +public class Main { + private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + private static final int[] dx = {0, 1, 0, -1, 0}; + private static final int[] dy = {1, 0, -1, 0, 0}; + private static Map ghosts; + private static boolean[][][] visited; + private static char[][] map; + private static int[] start, end; + private static int N, M; + public static void main(String[] args) throws IOException { + init(); + int answer = BFS(); + + if (answer == -1) bw.write("GG"); + else bw.write(answer + "\n"); + bw.flush(); + bw.close(); + br.close(); + } + + private static void init() throws IOException { + StringTokenizer st = new StringTokenizer(br.readLine()); + N = Integer.parseInt(st.nextToken()); + M = Integer.parseInt(st.nextToken()); + + st = new StringTokenizer(br.readLine()); + start = new int[2]; + end = new int[2]; + + start[0] = Integer.parseInt(st.nextToken())-1; + start[1] = Integer.parseInt(st.nextToken())-1; + end[0] = Integer.parseInt(st.nextToken())-1; + end[1] = Integer.parseInt(st.nextToken())-1; + + map = new char[N][M]; + ghosts = new HashMap<>(); + visited = new boolean[N][M][4]; + + for (int i = 0; i < N; i++) { + map[i] = br.readLine().toCharArray(); + for (int j = 0; j < M; j++) { + if (map[i][j] != '.' && map[i][j] != '#') { + ghosts.put(i+","+j, map[i][j] - '0'); + } + } + } + } + + private static int BFS() { + Queue q = new ArrayDeque<>(); + visited[start[0]][start[1]][0] = true; + q.add(new int[]{start[0], start[1], 0}); + + while (!q.isEmpty()) { + int[] current = q.poll(); + + if (current[0] == end[0] && current[1] == end[1]) return current[2]; + + for (int i = 0; i < 5; i++) { + int nx = current[0] + dx[i]; + int ny = current[1] + dy[i]; + + if (OOB(nx, ny) || map[nx][ny] != '.' || visited[nx][ny][(current[2]+1)%4] || find(nx, ny, current[2]+1)) continue; + visited[nx][ny][(current[2]+1)%4] = true; + q.add(new int[]{nx, ny, current[2]+1}); + } + } + + return -1; + } + + private static boolean find(int nx, int ny, int nTime) { + for (int i = 0; i < 4; i++) { + int nnx = nx; + int nny = ny; + int d = 0; + while (!OOB(nnx, nny)) { + if (map[nnx][nny] == '#') break; + else if (map[nnx][nny] != '.') { + int nState = (map[nnx][nny] - '0' + nTime) % 4; + if (Math.abs(i-nState) == 2) { + return true; + } + break; + } + d++; + nnx = nx + dx[i]*d; + nny = ny + dy[i]*d; + } + } + + return false; + } + + private static boolean OOB(int nx, int ny) { + return nx < 0 || nx > N-1 || ny < 0 || ny > M-1; + } +} +```