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

JavaScript로 두 숫자가 최소 2개의 공통 1비트를 공유하는지 확인하는 방법

문제

두 개의 숫자를 인자로 받는 JavaScript 함수를 작성해야 합니다. 이 함수는 두 숫자의 이진수 표현에서 같은 위치에 1이 최소 두 번 나타나면 true를, 그렇지 않으면 false를 반환해야 합니다.

해결 접근 방식

두 숫자를 이진수 문자열로 변환한 뒤, 자릿수를 맞추기 위해 더 긴 쪽의 앞부분을 잘라냅니다. 그 다음 각 자리를 비교하여 두 숫자 모두 '1'인 경우의 개수를 세고, 그 개수가 2 이상이면 true를 반환합니다.

예제

다음은 전체 코드입니다 −

const num1 = 10;
const num2 = 15;
const checkBits = (num1 = 1, num2 = 1) => {
    let c = num1.toString(2).split('');
    let d = num2.toString(2).split('');
    if(c.length > d.length){
        c = c.slice(c.length - d.length);
    }else{
        d = d.slice(d.length - c.length);
    };
    let count = 0;
    for(let i = 0; i < d.length; i++){
        if(c[i] === "1" && d[i] === "1"){
            count++;
        };
    };
    return count > 1;
};
console.log(checkBits(num1, num2));

출력 결과

콘솔 출력 결과는 다음과 같습니다 −

true

코드 설명

10은 이진수로 1010, 15는 이진수로 1111입니다. 두 숫자를 오른쪽 기준으로 정렬해 비교하면, 같은 위치에 모두 1이 있는 경우가 두 번 발생합니다. 공통 1비트의 개수가 최소 2개 이상이므로 함수는 true를 반환합니다.

이 방식은 시간 복잡도 O(n)(n은 이진수 자릿수)으로 동작하며, 비트 연산자(&)와 popcount 스타일의 계산을 활용하면 더욱 효율적으로 구현할 수도 있습니다.