From 244be5fd0a17723727d9ad961729945a92f430c7 Mon Sep 17 00:00:00 2001 From: JHLEE325 <82587652+JHLEE325@users.noreply.github.com> Date: Thu, 22 Jan 2026 11:49:20 +0900 Subject: [PATCH] =?UTF-8?q?[20260122]=20BOJ=20/=20G3=20/=20=EC=86=8C?= =?UTF-8?q?=EC=88=98=20=EA=B2=BD=EB=A1=9C=20/=20=EC=9D=B4=EC=A4=80?= =?UTF-8?q?=ED=9D=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...4\354\210\230 \352\262\275\353\241\234.md" | 80 +++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 "JHLEE325/202601/22 BOJ G4 \354\206\214\354\210\230 \352\262\275\353\241\234.md" diff --git "a/JHLEE325/202601/22 BOJ G4 \354\206\214\354\210\230 \352\262\275\353\241\234.md" "b/JHLEE325/202601/22 BOJ G4 \354\206\214\354\210\230 \352\262\275\353\241\234.md" new file mode 100644 index 00000000..4d203815 --- /dev/null +++ "b/JHLEE325/202601/22 BOJ G4 \354\206\214\354\210\230 \352\262\275\353\241\234.md" @@ -0,0 +1,80 @@ +```java +import java.io.*; +import java.util.*; + +public class Main { + static boolean[] isPrime = new boolean[10000]; + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + Arrays.fill(isPrime, true); + isPrime[0] = isPrime[1] = false; + for (int i = 2; i * i < 10000; i++) { + if (isPrime[i]) { + for (int j = i * i; j < 10000; j += i) isPrime[j] = false; + } + } + + int T = Integer.parseInt(br.readLine()); + for (int t = 0; t < T; t++) { + StringTokenizer st = new StringTokenizer(br.readLine()); + int start = Integer.parseInt(st.nextToken()); + int end = Integer.parseInt(st.nextToken()); + + int result = bfs(start, end); + System.out.println(result == -1 ? "Impossible" : result); + } + } + + static int bfs(int start, int end) { + Queue q = new LinkedList<>(); + int[] dist = new int[10000]; + Arrays.fill(dist, -1); + + q.add(start); + dist[start] = 0; + + while (!q.isEmpty()) { + int curr = q.poll(); + if (curr == end) return dist[curr]; + + for (int i = 0; i < 4; i++) { + int[] digits = getDigits(curr); + + for (int d = 0; d <= 9; d++) { + if (i == 3 && d == 0) continue; + + int next = changeDigit(digits, i, d); + + if (isPrime[next] && dist[next] == -1) { + dist[next] = dist[curr] + 1; + q.add(next); + } + } + } + } + return -1; + } + + static int[] getDigits(int num) { + int[] digits = new int[4]; + for (int i = 0; i < 4; i++) { + digits[i] = num % 10; + num /= 10; + } + return digits; + } + + static int changeDigit(int[] digits, int idx, int d) { + int res = 0; + int p = 1; + for (int i = 0; i < 4; i++) { + if (i == idx) res += d * p; + else res += digits[i] * p; + p *= 10; + } + return res; + } +} +```