From db0d48261ded0a6d75ef879478ad556075ee0644 Mon Sep 17 00:00:00 2001 From: lkhyun <102892446+lkhyun@users.noreply.github.com> Date: Mon, 28 Apr 2025 15:41:18 +0900 Subject: [PATCH] =?UTF-8?q?[20250428]=20BOJ=20/=20G4=20/=20DSLR=20/=20?= =?UTF-8?q?=EC=9D=B4=EA=B0=95=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lkhyun/202504/28 BOJ G4 DSLR.md | 78 +++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 lkhyun/202504/28 BOJ G4 DSLR.md diff --git a/lkhyun/202504/28 BOJ G4 DSLR.md b/lkhyun/202504/28 BOJ G4 DSLR.md new file mode 100644 index 00000000..3f1db402 --- /dev/null +++ b/lkhyun/202504/28 BOJ G4 DSLR.md @@ -0,0 +1,78 @@ +```java +import java.io.*; +import java.util.*; + +public class Main { + static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + + public static void main(String[] args) throws Exception { + int T = Integer.parseInt(br.readLine()); + while (T-- > 0) { + StringTokenizer st = new StringTokenizer(br.readLine()); + int A = Integer.parseInt(st.nextToken()); + int B = Integer.parseInt(st.nextToken()); + bfs(A, B); + } + bw.flush(); + bw.close(); + } + + static void bfs(int start, int target) throws IOException { + boolean[] visited = new boolean[10000]; + int[] prev = new int[10000]; + char[] op = new char[10000]; + + ArrayDeque q = new ArrayDeque<>(); + visited[start] = true; + q.add(start); + + while (!q.isEmpty()) { + int cur = q.poll(); + if (cur == target) break; + + // D + int next = (cur * 2) % 10000; + if (!visited[next]) { + visited[next] = true; + prev[next] = cur; + op[next] = 'D'; + q.add(next); + } + // S + next = (cur == 0 ? 9999 : cur - 1); + if (!visited[next]) { + visited[next] = true; + prev[next] = cur; + op[next] = 'S'; + q.add(next); + } + // L + next = (cur % 1000) * 10 + cur / 1000; + if (!visited[next]) { + visited[next] = true; + prev[next] = cur; + op[next] = 'L'; + q.add(next); + } + // R + next = (cur % 10) * 1000 + cur / 10; + if (!visited[next]) { + visited[next] = true; + prev[next] = cur; + op[next] = 'R'; + q.add(next); + } + } + + StringBuilder sb = new StringBuilder(); + for (int p = target; p != start; p = prev[p]) { + sb.append(op[p]); + } + bw.write(sb.reverse().toString()); + bw.write('\n'); + } +} + + +```