구름톤 챌린지 1-5. 이진수 정렬

짱올이·2023년 8월 25일
post-thumbnail

문제 5. 이진수 정렬

해당 문제는 주어진 데이터를 조건에 맞게 변형한 후, 다중 조건에 맞추어 정렬하는 문제입니다. 현대 모비스 알고리즘 대회 변형 문제입니다.


  1. 정렬을 위해 객체를 생성하고 값을 비교한다.
    Pair 객체 생성 후 비교하기 위해 Comparable를 상속받아 사용한다.
    입력한 값 2진수, 10진수를 객체에 저장한다.

  2. 비교한 값을 조건에 맞게 정렬한다.
    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);
	}
}
profile
모르면 알때까지 공부하라고~~!!

0개의 댓글