이번에 풀어본 문제는
프로그래머스 점프와 순간이동 입니다.
import java.util.*;
public class Solution {
public int solution(int n) {
int answer = 0;
while (n > 0) {
if (n % 2 == 0) n /= 2;
else {
n--;
answer++;
}
}
return answer;
}
}
시작 지점에서 n까지 이동하려고 합니다.
이동하는 방법에는 점프와 순간이동이 있습니다.
점프를 했을 경우 거리만큼의 에너지를 소모하고,
순간이동은 현재 위치 * 2 만큼 이동할 수 있으며 에너지를 소모하지 않습니다.
위의 조건에서 n까지 이동하기 위한 최소 에너지 소모 비용을 구하는 문제입니다.
입력되는 n의 최댓값이 10억이기 때문에, 배열은 활용할 수 없었고, 반복문을 통해 목적지 부터 출발점까지 돌아오는 과정을 구현해보았습니다. 순간이동이 가능하다면 n값을 2로 나누어 순간이동을 해주고, 홀수라서 불가능하다면 에너지를 1 소모하여 한칸 점프합니다.
이 과정을 반복한 후 누적된 answer을 반환해주면 해결할 수 있습니다.