OO 연구소는 한 번에
K
칸을 앞으로 점프하거나, (현재까지 온 거리) x 2 에 해당하는 위치로 순간이동을 할 수 있는
특수한 기능을 가진 아이언 슈트를 개발하여 판매하고 있습니다.
이 아이언 슈트는 건전지로 작동되는데, 순간이동을 하면 건전지 사용량이 줄지 않지만,
앞으로K
칸을 점프하면K
만큼의 건전지 사용량이 듭니다.
그러므로 아이언 슈트를 착용하고 이동할 때는 순간 이동을 하는 것이 더 효율적입니다.
아이언 슈트 구매자는 아이언 슈트를 착용하고 거리가N
만큼 떨어져 있는 장소로 가려고 합니다.
단, 건전지 사용량을 줄이기 위해 점프로 이동하는 것은 최소로 하려고 합니다.
아이언 슈트 구매자가 이동하려는 거리N
이 주어졌을 때,
사용해야 하는 건전지 사용량의 최솟값을return
하는solution
함수를 만들어 주세요.
public class BatteryOptimizer
{
public static int Solution(int n)
{
int answer = 0;
while (n != 0)
{
if (n % 2 == 0)
{
n /= 2;
}
else
{
n--;
answer++;
}
}
return answer;
}
}
도착 지점에서부터 거꾸로 접근 하는 상황을 가정
n
= 10 일때
- 2로 나누는 경우 = 5까지 이동한 후 순간이동 한 상태와 동일
n
= 5 일때- 4까지 이동한 상태에서 1칸 점프한 상태(배터리를 1칸 소모)
n
= 4 일때- 2까지 이동한 후 순간이동 한 상태와 동일
n
= 2 일때- 1까지 이동한 후 순간이동 한 상태와 동일
n
= 1 일때- 0칸에서 1칸 점프한 상태(배터리를 1칸 소모)
해당 연산 과정을 통해 10에서부터 거꾸로 접근할 때 2칸의 배터리를 소모한 것을 확인 가능