문제 5. 이진수 정렬
해당 문제는 주어진 데이터를 조건에 맞게 변형한 후, 다중 조건에 맞추어 정렬하는 문제입니다. 현대 모비스 알고리즘 대회 변형 문제입니다.
정렬을 위해 객체를 생성하고 값을 비교한다.
Pair 객체 생성 후 비교하기 위해 Comparable를 상속받아 사용한다.
입력한 값 2진수, 10진수를 객체에 저장한다.
비교한 값을 조건에 맞게 정렬한다.
Collections.sort(arr);

import java.io.*;
import java.util.*;
class Pair implements Comparable<Pair> {
int bits, num;
public Pair(int bits, int num) {
this.bits = bits;
this.num = num;
}
public int compareTo(Pair o) {
if (this.bits == o.bits) {
return o.num - this.num;
} else {
return this.bits - o.bits;
}
}
}
class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
// 중복 key 처리 필요
// 2진수로 큰 값으로 정렬
StringTokenizer nums = new StringTokenizer(br.readLine());
ArrayList<Pair> arr = new ArrayList<>();
for(int i = 0; i < n; i++) {
int num = Integer.parseInt(nums.nextToken());
int bits = Integer.bitCount(num);
arr.add(new Pair(bits, num));
}
Collections.sort(arr);
System.out.println(arr.get(k-1).num);
}
}