[Algorithm - Baekjoon] 16953번 A -> B

nunu·2023년 9월 12일
0

Algorithm

목록 보기
76/142

문제

정수 A를 B로 바꾸려고 한다. 가능한 연산은 다음과 같은 두 가지이다.

  • 2를 곱한다.
  • 1을 수의 가장 오른쪽에 추가한다.
  • A를 B로 바꾸는데 필요한 연산의 최솟값을 구해보자.

입력

첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다.

출력

A를 B로 바꾸는데 필요한 연산의 최솟값에 1을 더한 값을 출력한다. 만들 수 없는 경우에는 -1을 출력한다.

예제1 - 입력

2 162

예제1 - 출력

5

예제2 - 입력

4 42

예제2 - 출력

-1

예제3 - 입력

100 40021

예제3 - 출력

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;
        }
    }
}
profile
Hello, I'm nunu

0개의 댓글