[프로그래머스] 점프와 순간 이동

2023. 2. 20. 23:03Algorithm

1. 앞으로 K만큼 이동 => 건전지 사용량 K
2. (현재까지 온 거리 * 2)위치로 이동 => 건전지 사용X
=> 2번 방법을 많이 사용하는 것이 유리!
2번 사용을 우선으로 하고, 어쩔 수 없을 때 1번을 사용하는 것으로 문제를 풀었다.
 
도착한 위치부터 0위치로 돌아간다고 생각했을 때,
위치가 짝수일 때는 2번 방법을 사용해서 절반만큼 돌아가고, (곱하기 2한 위치로 이동하니까)
위치가 홀수일 경우는 1번을 사용하여 1만큼 돌아갈 수 있다.

즉, 2로 나누어 떨어지면 사용량 0, 아니면 사용량 1이다.

예) 2500, 1250, 625, 624, 312, 156, 78, 39, 38, 19, 18, 9, 8, 4, 2, 1, 0
function solution(n) {
  let ans = 0;
  while (n > 0) {
    if (n % 2 === 1) {
      n -= 1;
      ans += 1;
    }
    n = n / 2;
  }
  return ans;
}