From 664af8648125438edb784208a1c01fe7b5966348 Mon Sep 17 00:00:00 2001 From: JHLEE325 <82587652+JHLEE325@users.noreply.github.com> Date: Fri, 8 Aug 2025 08:08:28 +0900 Subject: [PATCH] =?UTF-8?q?[20250808]=20BOJ=20/=20G4=20/=EB=B1=80=20/=20?= =?UTF-8?q?=EC=9D=B4=EC=A4=80=ED=9D=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "JHLEE325/202508/08 BOJ G4 \353\261\200.md" | 80 +++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 "JHLEE325/202508/08 BOJ G4 \353\261\200.md" diff --git "a/JHLEE325/202508/08 BOJ G4 \353\261\200.md" "b/JHLEE325/202508/08 BOJ G4 \353\261\200.md" new file mode 100644 index 00000000..69b5de04 --- /dev/null +++ "b/JHLEE325/202508/08 BOJ G4 \353\261\200.md" @@ -0,0 +1,80 @@ +```java +import java.io.*; +import java.util.*; + +public class Main { + + static int n, k, l; + static int[][] board; + static Deque snake = new ArrayDeque<>(); + static Map dirMap = new HashMap<>(); + + static int[][] dir = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; + + public static void main(String[] args) throws Exception { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st; + + n = Integer.parseInt(br.readLine()); + k = Integer.parseInt(br.readLine()); + board = new int[n][n]; + + for (int i = 0; i < k; i++) { + st = new StringTokenizer(br.readLine()); + int r = Integer.parseInt(st.nextToken()) - 1; + int c = Integer.parseInt(st.nextToken()) - 1; + board[r][c] = 2; + } + + l = Integer.parseInt(br.readLine()); + for (int i = 0; i < l; i++) { + st = new StringTokenizer(br.readLine()); + int t = Integer.parseInt(st.nextToken()); + char d = st.nextToken().charAt(0); + dirMap.put(t, d); + } + + System.out.println(simulate()); + } + + static int simulate() { + int time = 0; + int direction = 0; + int x = 0, y = 0; + + snake.offerLast(new int[]{y, x}); + board[y][x] = 1; + + while (true) { + time++; + int dy = y + dir[direction][0]; + int dx = x + dir[direction][1]; + + if (!(0 <= dy && dy < n && 0 <= dx && dx < n) || board[dy][dx] == 1) break; + + if (board[dy][dx] == 2) { + board[dy][dx] = 1; + snake.offerLast(new int[]{dy, dx}); + } else { + board[dy][dx] = 1; + snake.offerLast(new int[]{dy, dx}); + int[] tail = snake.pollFirst(); + board[tail[0]][tail[1]] = 0; + } + + if (dirMap.containsKey(time)) { + char turn = dirMap.get(time); + if (turn == 'L') direction = (direction + 3) % 4; + else if (turn == 'D') direction = (direction + 1) % 4; + } + + y = dy; + x = dx; + } + + return time; + } + +} + +```