Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript로 입력 숫자에 가장 가까운 2의 거듭제곱 구하기

이번 글에서는 하나의 숫자를 입력받아, 그 숫자에 가장 가까운 2의 거듭제곱(2^n) 값을 반환하는 JavaScript 함수를 작성해 보겠습니다.

예를 들어 입력값이 145라면, 출력 결과는 128이 되어야 합니다. 왜냐하면 128은 2^7로 표현할 수 있으며, 145와 가장 가까운 거리에 있는 2의 거듭제곱이기 때문입니다.

동작 원리

알고리즘의 핵심 로직은 다음과 같습니다.

  • 음수가 입력될 경우 절댓값으로 변환하여 양수만 처리합니다.
  • base 값을 1부터 시작해 계속 2배씩 늘려가며 비교합니다.
  • 현재 base와 다음 base 사이에서 입력값이 어느 쪽에 더 가까운지 판단하여, 더 가까운 쪽을 반환합니다.

예제 코드

const num = 145;
const nearestPowerOfTwo = num => {
    // 음수가 아닌 숫자만 처리
    if(num < 0){
        num *= -1;
    }
    let base = 1;
    while(base < num){
        if(num - base < Math.floor(base / 2)){
            return base;
        };
        base *= 2;
    };
    return base;
};
console.log(nearestPowerOfTwo(num));

출력 결과

콘솔에 출력되는 결과는 다음과 같습니다.

128

코드 설명

함수 내부에서는 base 변수를 1(2^0)로 초기화한 뒤, 반복문을 통해 1 → 2 → 4 → 8... 순으로 2배씩 증가시킵니다.

조건식 num - base < Math.floor(base / 2)는 현재 base와 입력값의 차이가 base의 절반보다 작은지 확인합니다. 만약 그렇다면, 다음 거듭제곱(base * 2)보다 현재 base가 입력값에 더 가깝다는 의미이므로 즉시 base를 반환하고 반복을 종료합니다.

입력값이 정확히 2의 거듭제곱인 경우에는 while 조건(base < num)이 성립하지 않으므로, 반복문이 종료된 후 해당 값 자체가 그대로 반환됩니다. 예를 들어 64를 입력하면 64가 그대로 출력됩니다.