문제
내 풀이
function solution(n) {
if(n === 1) return 1;
if(n % 2 === 0) return solution(n / 2);
else return solution((n - 1) / 2) + 1;
}
건전지 사용량을 최소화하려면 최대한 순간이동을 많이 해야한다. 그래서 이동해야하는 위치 n이 짝수인지, 홀수인지에 따라 나눠 처리하도록 했다.
위치 n이 짝수인 경우
- 예를 들어, n이 8이라면 처음위치인 0→1 한칸 점프, 1→2 순간이동, 2→4 순간이동, 4→8 순간이동하는 방법으로 건전지 사용량을 최소화 할 수 있다.
- 다시 생각해보면, 위치 8로 이동하기 까지의 건전지 사용량과 위치 4로 이동하기 까지의 건전지 사용량은 같다. 왜냐면 (현재 위치 x 2)의 위치로 이동하는 순간이동은 건전지를 사용하지 않기 때문이다.
- 그렇다면, 위치 8로 이동해야 한다면 위치 4로 이동하는 방법을 생각해보면 되고, 위치 4로 이동해야한다면 위치 2로, 위치 2로 이동해야한다면 위치 1로 이동하는 방법을 재귀적으로 생각해보면 된다.
위치 n이 홀수인 경우
- n이 홀수라고해서 방법은 달라지지 않는다. 다만, 무조건 한 칸은 순간이동이 아닌 점프를 해야한다.
풀이과정을 쓸 때마다 생각하는 거지만, 내가 머리로 생각한 과정을 글로 풀어쓰기가 어려운 것같다. 당연하게 혹은 자연스럽게 들었던 생각을 논리적으로 작성하는게 생각보다 귀찮고, 또 잘 쓴다는 것 자체가 어렵다. 그치만 귀찮아서 안하는 건 이제 고쳐야겠다!