정수 A를 B로 바꾸려고 한다. 가능한 연산은 다음과 같은 두 가지이다.
첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다.
A를 B로 바꾸는데 필요한 연산의 최솟값에 1을 더한 값을 출력한다. 만들 수 없는 경우에는 -1을 출력한다.
2 162
5
4 42
-1
100 40021
5
쉬운 문젠데 왜 정답률이 낮지? 의아해하면서 풀었던 코드
역시나.. 정답률이 낮은덴 이유가 있었다..
자료형!! 오버플로 날거라고 생각도 안햇는데 이것때문에 4번 제출하고 겨우 성공함...
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
br.close();
long a = Integer.parseInt(st.nextToken());
long b = Integer.parseInt(st.nextToken());
Queue<Number> queue = new LinkedList<>();
queue.offer(new Number(a, 1));
while (!queue.isEmpty()) {
Number now = queue.poll();
if (now.val == b) {
System.out.println(now.cal);
return;
}
for (int i = 0; i < 2; i++) {
long temp = now.val;
int cal = now.cal;
if (i == 0) {
temp *= 2;
}
else {
temp = (temp * 10) + 1;
}
if (temp < 0 || temp > b)
continue;
queue.offer(new Number(temp, cal + 1));
}
}
System.out.println(-1);
}
static class Number {
public long val;
public int cal;
public Number(long val, int cal) {
this.val = val;
this.cal = cal;
}
}
}