알고리즘/BOJ
[BOJ] 16953. A → B
재담
2022. 3. 23. 02:01
문제 원본 : https://www.acmicpc.net/problem/16953
16953번: A → B
첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다.
www.acmicpc.net
import java.io.*;
import java.util.ArrayDeque;
import java.util.Hashtable;
import java.util.Queue;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String s = br.readLine();
long a = Long.parseLong(s.split(" ")[0]);
long b = Long.parseLong(s.split(" ")[1]);
Queue<Long> queue = new ArrayDeque<>();
Hashtable<Long, Integer> hashtable = new Hashtable<>();
queue.add(b);
hashtable.put(b, 1);
while (!queue.isEmpty()) {
long curr = queue.poll();
int cnt = hashtable.get(curr);
if (curr == a) {
bw.write(String.valueOf(cnt));
bw.close();
br.close();
return;
}
if (curr % 2 == 0 && hashtable.get(curr / 2) == null) {
queue.add(curr / 2);
hashtable.put(curr / 2, cnt + 1);
}
if (curr % 10 == 1 && hashtable.get(curr / 10) == null) {
queue.add(curr / 10);
hashtable.put(curr / 10, cnt + 1);
}
}
bw.write(String.valueOf(-1));
bw.close();
br.close();
}
}
- BFS 문제
- 처음에는 정방향으로 했다가 시간 초과가 났다.
- 조건 없이 매번 2배씩 늘어나니 시간 초과가 날 수밖에 없었다.
- 역방향으로 하니 경우의 수가 훨씬 줄어들어 시간 초과를 피할 수 있었다.