문제

풀이

public int solution(int n) {
    int amount = 0;

    while (n > 0) {
        if (n % 2 == 1) {
            n = (n - 1) / 2;
            amount++;
        } else {
            n = n / 2;
        }
    }
    return amount;
}

정확히 N을 맞추어야 하고, 순간이동을 통해 2배를 하는 경우를 최대화해야 건전지 사용량을 최소화할 수 있다고 생각했다.

n이 0이 될 때까지 2로 나누어 가다가 만약 홀수가 나오면 건전지를 한 번 사용했다고 간주하고 -1을 해준 후 다시 2로 나누어가도록 반복해서 홀수가 나와서 -1을 해준 횟수가 총 건전지 사용량이 된다고 생각.