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

less than 1 minute read

문제 설명

OO 연구소는 한 번에 K 칸을 앞으로 점프하거나, (현재까지 온 거리) x 2 에 해당하는 위치로 순간이동을 할 수 있는 특수한 기능을 가진 아이언 슈트를 개발하여 판매하고 있습니다. 이 아이언 슈트는 건전지로 작동되는데, 순간이동을 하면 건전지 사용량이 줄지 않지만, 앞으로 K 칸을 점프하면 K 만큼의 건전지 사용량이 듭니다.
/* 중략 */
아이언 슈트 구매자가 이동하려는 거리 N이 주어졌을 때, 사용해야 하는 건전지 사용량의 최솟값을 return하는 solution 함수를 만들어 주세요.

제한사항

  • 숫자 N: 1 이상 10억 이하의 자연수
  • 숫자 K: 1 이상의 자연수

풀이

5분
이동하려는 거리 부터 순간이동하고, 순간 이동이 불가능하면(즉, 거리가 홀수이면) 칸을 옮기는 방법으로 최소 점프 회수를 구했다.

코드

// 10:54 ~ 10:58

#include <iostream>

using namespace std;

int solution(int n){
    int ans = 0;
    
    while(n != 0){
        if(n % 2 ==0) n /= 2;
        else{
            n -= 1;
            ++ans;
        }
    }

    return ans;
}