diff --git "a/JHLEE325/202509/29 BOJ G5 1\353\241\234 \353\247\214\353\223\244\352\270\260 2.md" "b/JHLEE325/202509/29 BOJ G5 1\353\241\234 \353\247\214\353\223\244\352\270\260 2.md" new file mode 100644 index 00000000..6775345e --- /dev/null +++ "b/JHLEE325/202509/29 BOJ G5 1\353\241\234 \353\247\214\353\223\244\352\270\260 2.md" @@ -0,0 +1,71 @@ +```java +import java.io.*; +import java.util.*; + +public class Main { + + static class Node { + int num; + int depth; + Node prev; + Node(int num, int depth, Node prev) { + this.num = num; + this.depth = depth; + this.prev = prev; + } + } + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st; + + int n = Integer.parseInt(br.readLine()); + + boolean[] visited = new boolean[n + 1]; + Queue q = new LinkedList<>(); + q.offer(new Node(n, 0, null)); + visited[n] = true; + + Node end = null; + + while (!q.isEmpty()) { + Node cur = q.poll(); + + if (cur.num == 1) { + end = cur; + break; + } + + if (cur.num - 1 >= 1 && !visited[cur.num - 1]) { + visited[cur.num - 1] = true; + q.offer(new Node(cur.num - 1, cur.depth + 1, cur)); + } + + if (cur.num % 2 == 0 && !visited[cur.num / 2]) { + visited[cur.num / 2] = true; + q.offer(new Node(cur.num / 2, cur.depth + 1, cur)); + } + + if (cur.num % 3 == 0 && !visited[cur.num / 3]) { + visited[cur.num / 3] = true; + q.offer(new Node(cur.num / 3, cur.depth + 1, cur)); + } + } + + StringBuilder sb = new StringBuilder(); + sb.append(end.depth).append("\n"); + + List path = new ArrayList<>(); + while (end != null) { + path.add(end.num); + end = end.prev; + } + + for (int i = path.size()-1; i >= 0; i--) { + sb.append(path.get(i) + " "); + } + + System.out.println(sb.toString()); + } +} +```