[LeetCode] 2917. Find the K-or of an Array

Chobby·약 9시간 전

LeetCode

목록 보기
822/826

😎풀이

  1. 숫자를 2진수로 변경하는 헬퍼 함수 정의
  2. nums의 10진수 요소를 모두 2진수로 변환
  3. 최대 길이의 수 파악(padding을 위함)
  4. 최대 길이에 맞게 모든 수 0으로 채움
  5. 모든 수를 순회하며 각 자릿수의 1 비트 수 탐색
  6. 자릿수의 1 비트 수가 k 이상인 경우, 최종 해당 자릿수 비트는 1로 적용
  7. 최종 반환된 2진수를 10진수로 변환하여 반환
function findKOr(nums: number[], k: number): number {
    const binaries = nums.map(numToBinary)
    let maxLen = 0
    for(const binary of binaries) {
        maxLen = Math.max(maxLen, binary.length)
    }
    const padding = binaries.map(binary => binary.padStart(maxLen, '0'))
    const digits = Array.from({ length: maxLen }, () => 0)
    for(const digit of padding) {
        for(let i = 0; i < digit.length; i++) {
            if(digit[i] === '0') continue
            digits[i]++
        }
    }
    const resultBinary = digits.reduce((acc, cur) => {
        const curBit = cur >= k ? '1' : '0'
        return acc + curBit
    }, '')
    if(!resultBinary) return 0
    return parseInt(resultBinary, 2)
};

function numToBinary(num: number) {
    let binary = ''
    while(num) {
        const curBit = num % 2
        binary = String(curBit) + binary
        num = Math.floor(num / 2)
    }
    return binary
}
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글