풀이 과정
- 각 숫자의 2진수를 2차원 배열로 저장:
map()
- 2진수 변환:
Number().toString(2)
- 1의 개수 세기: 배열로 변환 후
filter()
- 1의 개수 기준으로 내림차순 정렬, 10진수를 기준으로 내림차순 정렬:
sort()
- K번째 수 출력
코드
const readline = require('readline');
let rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let input = [];
rl.on('line', (line) => {
input.push(line.trim());
if (input.length === 2) {
rl.close();
}
});
rl.on('close', () => {
const [N, K] = input[0].split(' ').map(Number);
const arr = input[1]
.split(' ')
.map((e) => [
Number(e),
[...Number(e).toString(2)].filter((c) => c === '1').length,
]);
arr.sort((a, b) => b[1] - a[1] || b[0] - a[0]);
console.log(arr[K - 1][0]);
process.exit();
});