[Lv2] 점프와 순간 이동

걸음걸음·2023년 2월 20일
0

Test

목록 보기
1/29

문제 링크

  • n : 이동해야 하는 거리
  • 한 번에 k 칸 점프 가능 (배터리 k 소모)
  • 현재까지 온 거리 * 2 순간이동 가능 (배터리 소모 없음)
  • n의 거리를 갈 때, 배터리를 최소로 사용한 값 return
function solution(n){
    // n을 2로 나누었을 때 홀수가 나온 수 + 1(첫 한 칸)
    let battery = 0;
    // n이 2로 더 나뉘어지지 않을 때까지
    while(n>=2){
        // n의 값이 홀수일 경우
        if(n%2 !== 0){
            // 한칸 점프를 해야 하므로 전력 소모 1 추가, 남은 거리 n에서 1 제거
            battery+=1;
            n -= 1;
        }
        n = n/2
    }
    return battery + 1;
}

다른 사람의 풀이 1

어떤 수를 2로 나누고, 해당 몫을 또 2로 나누면서 나오는 나머지들의 모든 핪은 해당 수를 이진수로 변환한 수의 1의 개수와 같다.

function solution(n){
    if(n === 1) return 1;
    const nArr = Array.from(n.toString(2));
    return nArr.reduce((a,b)=>(+a)+(+b));
}

다른 사람의 풀이 2

function solution(n){
    if(n == 1) return 1;
    let battery = 0;
    // n을 2로 나눠가며 나오는 나머지의 합
    while(n>0) {
        battery += n%2;
        n = Math.floor(n/2);
    }
    return battery;
}
profile
꾸준히 나아가는 개발자입니다.

0개의 댓글