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

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

문제 개요

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

예를 들어 입력값이 365라면 결과는 256이 되어야 합니다. 256은 365에 가장 가까운 수 중에서 정수 n에 대해 2n 형태로 표현할 수 있기 때문입니다.

구현 코드

그럼 이 기능을 수행하는 함수의 코드를 작성해 보겠습니다.

const num = 365;
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));

출력 결과

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

256

동작 원리

이 알고리즘은 다음과 같은 단계로 동작합니다.

1. 음수 처리: 입력값이 음수인 경우 절댓값으로 변환하여 양수만 다루도록 합니다.

2. 기준값 초기화: 변수 base를 1(즉, 2⁰)로 초기화한 뒤, 입력값보다 커질 때까지 계속 2배씩 곱해 나갑니다.

3. 거리 비교: 각 반복마다 현재 base와 입력값의 차이가 base의 절반보다 작은지 확인합니다. 이 조건이 참이라는 것은 입력값이 현재 base 쪽에 더 가깝다는 의미이므로, 즉시 base를 반환합니다.

4. 종료 조건: 반복문이 끝날 때까지 조건에 걸리지 않았다면, 마지막 base(입력값 이상의 최소 2의 거듭제곱)가 가장 가까운 값이므로 이를 반환합니다.

이처럼 반복문과 간단한 비교 연산만으로 원하는 결과를 효율적으로 얻을 수 있습니다.