https://www.acmicpc.net/problem/16953
문제
정수 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);
'코테풀이 > 그리디' 카테고리의 다른 글
[백준 | 실버2 | 파이썬 | JS] 1931: 회의실 배정(그리디, 시작값, 끝값, 두개의 값 비교) (0) | 2023.05.21 |
---|---|
[백준 | 실버4 | 파이썬 | JS] 13305번: 주유소(그리디) (0) | 2023.05.21 |
[백준 | JS] 1541번: 잃어버린 괄호 (0) | 2023.04.30 |
[백준 | 실버3 ] 20365: 블로그2(문자열, 그리디) (0) | 2022.09.02 |
[백준 | 실버2] 나무 자르기(그리디, 정렬) (0) | 2022.08.26 |
[백준 | JS] 16953번 A → B