728x90
문제
N개의 10진수 정수가 주어진다. 플레이어에게 정수를 그냥 정렬하는 것은 너무 쉽기 때문에, 아래 기준에 따라 정수를 정렬하기로 한다.
- 10진수 정수를 2진수로 나타냈을 때, 2진수에 포함된 1의 개수를 기준으로 내림차순 정렬한다.
- 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
'코테 > 구름톤 챌린지' 카테고리의 다른 글
[ 구름톤 챌린지 ] 통증 (0) | 2023.08.27 |
---|---|
[ 구름톤 챌린지 ] 문자열 나누기 (0) | 2023.08.21 |
[ 구름톤 챌린지 ] 완벽한 햄버거 만들기 (0) | 2023.08.20 |
[ 구름톤 챌린지 ] 합 계산기 (0) | 2023.08.20 |
[ 구름톤 챌린지 ] 프로젝트 매니징 (0) | 2023.08.20 |