점프와 순간 이동

Seongjin Jo·2023년 5월 7일
0

프로그래머스 LV2

목록 보기
2/28
post-thumbnail

문제

풀이

import java.util.*;

public class Solution {

    public int solution(int n) {
        int ans = 0;
        // 한칸 씩 점프 -> 건전지 1소모
        // 온 거리 2배 순간이동 -> 건전지 0소모
        
        while(true){
            if(n==0) break;
            
            if(n%2==0) {
                n=n/2;
            }
            else if(n%2!=0){
                n=n-1;
                ans++;
            }
        }

        return ans;
    }
}

그냥 구현 문제인듯하다.

  1. 한칸 씩 이동할때마다 건전지가 1씩 소모된다.
  2. 지금까지의 거리를 2배씩 순간이동하면 건전지 소모는 없다.
  3. 목적지 거리까지의 최소한의 건전지 소모량을 구해라

이러한 유의 사항들을 숙지하고 입력값중 제일 큰 숫자인 5000을 기준으로 한번 계산을 해본다.
5000을 2로 나눴을때 나누어 떨어진다. 그러면 2배 순간이동을 한것. 2500이 나온다. 2500을 2로 나눴을때는 1250이 나온다. 1250을 나누면 625가 나온다. 여기서 625는 2로 나누어 떨어지지 않는다. 이 경우에는 1칸 점프 한 것이다. 배터리 소모량을 ++ 해준다. 이런 식으로 최초의 시작점 0이 될때까지 while문을 돌려준다.

0개의 댓글