문제명 : 이진수 정렬
문제
N개의 10진수 정수가 배열로 주어진다.
이 정수를 2진수로 나타내고, 1의 갯수를 기준으로 내림차순 정렬한다.
1의 개수가 같다면 원래 10진수를 기준으로 내림차순 정렬한다.
입력
첫째 줄에 정수의 수 N이 주어지고, 찾으려는 정수의 위치 K가 공백을 두고 주어진다.
둘째 줄에 정수 a1, a2, ..., an이 공백을 두고 주어진다.
제약조건
입출력
예시1
입력
8 6
1 2 3 4 5 6 7 8
출력
4
풀이
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(n => +n)
const arr = input[1].split(" ").map(n => +n)
const binaryArr = arr.map(el => el.toString(2))
const helper = (binary) => {
let count = 0
for (let i = 0; i < binary.length; i++) {
if (binary[i] === "1") count++
}
return count
}
binaryArr.sort((a, b) => {
let binaryA = helper(a.toString(2))
let binaryB = helper(b.toString(2))
if (binaryA === binaryB) {
let intA = parseInt(a, 2)
let intB = parseInt(b, 2)
return intB - intA
}
return binaryB - binaryA
})
console.log(parseInt(binaryArr[K - 1], 2))
})
- 파싱한 숫자 배열을 이진수로 변환한다.
- 변환한 이진수의 숫자 1 갯수를 카운트하는 헬퍼 함수를 만든다.
- 이진수 배열을 정렬한다.
- a와 b의 1 갯수가 같다면 정수를 기준으로 내림차순 한다.
- 그게 아니라면 1의 갯수를 기준으로 내림차순 한다.
'코테 문제 풀이' 카테고리의 다른 글
[Node.js] 구름톤 챌린지 2주 Day2 풀이 (구름 찾기 깃발) (0) | 2023.08.27 |
---|---|
[Node.js] 구름톤 챌린지 2주 Day1 풀이 (0) | 2023.08.21 |
[Node.js] 구름톤 챌린지 1주 Day3 풀이 (0) | 2023.08.16 |
[백준 12789] 도키도키 간식드리미 (Node.js) - 스택, 큐 (0) | 2023.08.15 |
[Node.js] 구름톤 챌린지 1주 Day2 풀이 (0) | 2023.08.15 |