
-Code
import java.io.*;
import java.util.*;
public class BOJ16953 {
static class CalcInfo {
// int형을 벗어나는 경우가 있으므로 long형
long num;
int cnt;
public CalcInfo(long num, int cnt) {
this.num = num;
this.cnt = cnt;
}
}
public static void main(String[] args) throws IOException {
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int start = Integer.parseInt(st.nextToken());
int target = Integer.parseInt(st.nextToken());
System.out.println(getCalcCnt(start, target));
}
private static int getCalcCnt(int start, int target) {
Deque<CalcInfo> deq = new ArrayDeque<>();
CalcInfo calcStart = new CalcInfo(start, 1);
deq.addLast(calcStart);
while (!deq.isEmpty()) {
CalcInfo now = deq.pollFirst();
// 타겟이랑 같으면 연산 횟수 반환
if (now.num == target) {
return now.cnt;
}
// 다음 숫자 탐색
long[] nextNums = {now.num * 2, now.num * 10 + 1};
for (int i = 0; i < 2; i++) {
// 크기가 작은 경우에만 덱에 저장
if (nextNums[i] <= target) {
CalcInfo nextCalc =
new CalcInfo(nextNums[i], now.cnt + 1);
deq.addLast(nextCalc);
}
}
}
return -1;
}
}
int 형을 벗어나는 것을 예상 못해서 틀리고 해당 부분을 long으로 바꾸니 해결되었습니다.
'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [백준/Java] 2660번 회장뽑기 (0) | 2026.02.06 |
|---|---|
| [백준/Java] 6811번 Old Fishin’ Hole (1) | 2026.02.06 |
| [백준/Java] 9019번 DSLR (0) | 2026.02.05 |
| [백준/Java] 34845번 강의평 (0) | 2026.02.05 |
| [백준/Java] 12904번 A와 B (0) | 2026.02.05 |