문제
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