문제
number, num을 유일한 인수로 취하는 JavaScript 함수를 작성해야 합니다.
-
우리 함수는 num에 대해 다음 두 가지 작업만 수행할 수 있습니다. num이 짝수이면 num을 num/2로 바꿀 수 있습니다.
-
num이 홀수이면 num을 num + 1 또는 num - 1로 바꿀 수 있습니다.
이 두 연산의 조합만 사용하여 함수는 num을 1로 낮추는 데 필요한 최소 연산 수를 계산하는 데 필요합니다. 함수는 최소 연산 수를 반환해야 합니다.
예를 들어, 함수에 대한 입력이 -
인 경우const num = 7;
그러면 출력은 다음과 같아야 합니다. -
const output = 4;
출력 설명:
가능한 가장 작은 연산은 -
이기 때문에7 -> 8 -> 4 -> 2 -> 1 or 7 -> 6 -> 3 -> 2 -> 1
예시
이에 대한 코드는 -
const num = 7;
const downToOne = (num = 1) => {
let min = Number.POSITIVE_INFINITY;
let stack = [{ num: num, step: 0 }];
let set = new Set();
let next;
let item;
while (stack.length) {
item = stack.shift();
if (item.num === 1) {
if (min > item.step) {
min = item.step;
}
continue;
}
if (set.has(item.num) || item.step >= min) {
continue;
}
set.add(item.num);
next = item.step + 1;
if (item.num % 2 === 0) {
item.num /= 2;
stack.push({ num: item.num, step: next });
} else {
stack.push({ num: item.num - 1, step: next });
stack.push({ num: item.num + 1, step: next });
}
}
return min;
};
console.log(downToOne(num)); 출력
콘솔의 출력은 -
4