[백준 | JS] 16953번 A → B

파송송계란빡 ㅣ 2023. 5. 1. 22:52

https://www.acmicpc.net/problem/16953

 

16953번: A → B

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

www.acmicpc.net

 

문제

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

  • 2를 곱한다.
  • 1을 수의 가장 오른쪽에 추가한다. 

A를 B로 바꾸는데 필요한 연산의 최솟값을 구해보자.

입력

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

출력

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

예제 입력 1 복사

2 162

예제 출력 1 복사

5

2 → 4 → 8 → 81 → 162

예제 입력 2 복사

4 42

예제 출력 2 복사

-1

예제 입력 3 복사

100 40021

예제 출력 3 복사

5

100 → 200 → 2001 → 4002 → 40021

let fs = require("fs");
let input = fs.readFileSync("./test.txt").toString().split("\n");
//let input = fs.readFileSync("/dev/stdin").toString().split("\n");

let [a, b] = input[0].split(" ").map(Number);
let answer = 1;
let flag = false;

while (a <= b) {
    if (a === b) {
        flag = true;
        break;
    }

    //2로 나머지가 0인 경우 2로 나눠줌
    if (b % 2 === 0) {
        b = parseInt(b / 2);
        answer += 1;
    }
    //10으로 나눈 나머지가 1인 경우
    else if (b % 10 === 1) {
        b = parseInt(b / 10);
        answer += 1;
    } else {
        break;
    }
}

console.log(flag ? answer : -1);
[백준 | JS] 16953번 A → B