본문 바로가기

Programmers

[프로그래머스][JAVA]Lv. 2 - 점프와 순간 이동

https://school.programmers.co.kr/learn/courses/30/lessons/12980

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

K칸 이동하면 K만큼의 건전지 소모를, 순간 이동은 현재온 거리 * 2 만큼 이동하지만 건전지를 소모하지 않는다.

최대한 건전지를 적게 소모하려면 순간 이동을 더 많이 해야 할 것 같다.

목적지인 n을 0이 될 때까지 2로 나누고 (순간 이동), 홀수인 경우 - 1을 하여 (건전지 소모 이동) 답을 찾았다.

public class Solution {
    public int solution(int n) {
        int answer = 0;
        int number = n;
        // 역으로 n -> 0 으로 가기
        while (number != 0) {
            if (number % 2 != 0) { // number 가 홀수라면
                number = number - 1;
                answer++; // 한칸 앞으로
            }
            number = number / 2; // 순간이동하기
        }

        return answer;
    }
}