본문 바로가기

코테/구름톤 챌린지

[ 구름톤 챌린지 ] 이진수 정렬

728x90

문제

N개의 10진수 정수가 주어진다. 플레이어에게 정수를 그냥 정렬하는 것은 너무 쉽기 때문에, 아래 기준에 따라 정수를 정렬하기로 한다.

  1. 10진수 정수를 2진수로 나타냈을 때, 2진수에 포함된 1의 개수를 기준으로 내림차순 정렬한다.
  2. 1의 개수가 같다면, 원래 10진수를 기준으로 내림차순 정렬한다.

플레이어가 정수를 잘 정렬했을 때, 앞에서 K번째에 위치한 수는 어떤 수가 될지

구해보자.

입력

첫째 줄에 주어지는 정수의 수 N과 플레이어가 찾으려는 정수의 위치 K가 공백을

..두고 주어진다.

둘째 줄에 정수 a1 , a2, ••• , an 이 공백을 두고 주어진다.

  • 1 ≤ N ≤ 500 000
  • 1 ≤ K ≤ N
  • 1 ≤ a ≤ 2^20

출력

기준에 따라 정렬된 정수 중, 앞에서 K번째에 위치한 수를 출력한다.

제출 코드

const readline = require('readline');
let rl = readline.createInterface({
	input: process.stdin,
	output: process.stdout,
});
let input=[];

rl.on('line', (line) => {
	input.push(line);
});

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]);
})

배운점

  • 숫자들을 2차원 배열로 저장하는 법을 배웠다.
  • 1의 개수를 filter를 사용해서 길이를 세는 방법을 배웠다.
  • 내림차순으로 arr.sort((a,b)⇒b-a)를 써왔는데 이를 2차원 배열에서도 사용하는 법을 배웠다.

느낀점

  • 현대 모비스 기출이지만 문제를 변형했어도 문제가 많이 어려웠다.
  • 내림차 , 오름차 정렬을 2차원 배열로 사용했는데 이후에도 다른 문제에 많이 활용할 것같다 .
728x90