
😎풀이
- 숫자를 2진수로 변경하는 헬퍼 함수 정의
nums의 10진수 요소를 모두 2진수로 변환
- 최대 길이의 수 파악(padding을 위함)
- 최대 길이에 맞게 모든 수
0으로 채움
- 모든 수를 순회하며 각 자릿수의
1 비트 수 탐색
- 자릿수의
1 비트 수가 k 이상인 경우, 최종 해당 자릿수 비트는 1로 적용
- 최종 반환된 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
}