문제
핵심 아이디어
- 이 코드는 최소한의 점프를 사용하여 건전지 사용량을 최소화한다. 건전지는 점프할 때만 소모되므로, 최대한 점프를 피하고 순간이동을 활용하는 것이 효율적이다.
- n % 2 === 0일 때 n /= 2는 현재 거리가 짝수일 경우 순간이동을 통해 건전지 사용 없이 이동할 수 있음을 의미한다. 이는 효율적인 이동 방법이다.
- n % 2 !== 0일 때는 1칸 점프를 해야 하며, 이때 n -= 1을 통해 홀수를 짝수로 만들어 이후에 순간이동이 가능하게 한다. 이 과정에서 점프 횟수가 증가하고, count는 점프한 횟수를 기록한다.
- n이 0이 될 때까지 이 과정을 반복한다. n이 0이 되면 목표 지점에 도달한 것이므로, 최소 점프 횟수를 반환한다.
- 짝수일 때는 점프를 하지 않고 순간이동만으로 최대한 멀리 가며, 홀수일 때만 점프하는 방식을 반복함으로써 건전지 사용량을 최소화할 수 있다.
정답
function solution(n) {
let count = 0;
while (n > 0) {
if (n % 2 === 0) {
n /= 2;
} else {
n -= 1;
count++;
}
}
return count;
}