처음 코드는 재귀함수를 통해 n을 1부터 시작해서 건전지 사용량을 측정해보려 하였다.
테스트 케이스 1,2는 통과하였지만, 테스트 3과 제출에는 실패한 코드이다
function solution(n){
var ans = n;
// 현재 n의 위치, 거리, 사용량을 변수로 지정
let current_n = 0, distance = 0, use = 0;
//재귀함수 구현
function reCount(current_n, distance, use){
if(current_n === n){
if(ans > use)
ans = use;
return;
}else {
reCount(current_n+1, distance+1, use+1);
if(distance *2 <= n)
reCount(distance*2, distance *2, use);
}
}
reCount(1,1,1);
return ans;
}
실행시간이 10.0초를 넘어섰으며 더 짧은 방법으로 문제를 해결해야만 했다.
2가 계속 곱해지는 것에 유의해서 문제를 살펴본 결과 n을 1부터가 아닌 n부터 시작해서 n이 0이 되기 전까지 짝수이면 순간이동, 홀수면 점프라는 것을 발견하여
이에 대한 반복을 실행하는 것으로 코드를 수정하였다.
최종코드는 다음과 같다👇
function solution(n){
var ans = 0;
// n이 0이 아니라면 계속 반복
while(n > 0){
// 순간이동 가능
if(n%2 === 0){
n /= 2;
} else {
// 점프시, 건전지 사용량 1 증가
n -=1;
ans++;
}
}
// 최종 건전지 사용량 반환
return ans;
}