본문 바로가기
개발 공부 일지/JavaScript

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

by yelimu 2025. 3. 21.

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

0에서 출발하여 주어진 n 값에 도달 (초과가 아닌 n에 도착) 하기 위해 

+k 씩 이동하면 k만큼 배터리를 사용하게되고

순간이동하여 현재 위치 *2 인 위치로 이동하면 배터리를 사용하지 않는다.

최소의 배터리 사용량을 반환하는 함수

 

*2 할지 +k 할지 어떻게 결정하지?

일단 시작할때 +1 씩 하긴 해야하는데 

모든 경우의 수를 따져보라는건가? 했는데 도무지 방향을 모르겠어서

질문하기 가서 컨닝을 좀 했다.

 

접근법은 의외로 간단했는데

n에서부터 시작하는거다. n이 짝수면 /2 , 홀수면 - 1 해서 1에 도달할때까지 반복하면 된다.

function solution(n){
    let use = 1;
    let cur = n;
    while(cur !== 1){
        if(cur % 2 === 0){
            cur /= 2;
        }else{
            cur -= 1;
            use ++;
        }
    }
    return use;
}

 

복잡해보이는 문제도 뒤집어서 생각하는 연습이 필요할거같은데 

참 쉽지않다 ㅠ 

 

와 냅킨ai 짱이다...