5일차 미션: 이진수 정렬
10진수를 2진수로 바꾸고 다차원 정렬하여 문제를 풀이한다.
나의 풀이
import java.io.*;
import java.util.*;
class Main {
static int N, K;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] s = br.readLine().split(" ");
N = Integer.parseInt(s[0]);
K = Integer.parseInt(s[1]);
// 2차원 배열로 10진수와 2진수를 같이 정렬한다.
String[] s_numbers = br.readLine().split(" ");
int[][] numbers = new int[N][2];
for(int i = 0; i < N; i++) {
numbers[i][0] = Integer.parseInt(s_numbers[i]); // 숫자를 받는다.
// 2진수로 바꿔서 0의 개수를 확인한다.
String binaryString = Integer.toBinaryString(numbers[i][0]);
int one_count = 0;
for(int j = 0; j < binaryString.length(); j++) {
if(binaryString.charAt(j)=='1') {
one_count += 1;
}
}
numbers[i][1] = one_count;
}
// 정렬 시작
Arrays.sort(numbers, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
// 같다면
if(o1[1] == o2[1]) {
return o2[0] - o1[0];
}else {
return o2[1] - o1[1];
}
}
});
System.out.println(numbers[K-1][0]);
}
}
2진수로 변환하기
나의 풀이는 Integer.toBinaryString을 사용하여 2진수로 변환하였는데, 구름톤에서 제공한 풀이를 참고하면 다음과 같이 쓸 수 있다.
// 자바에서 어떤 정수 num을 2진수로 변환하는 방법
int bits = Integer.bitCount(num);
// N진수로 바꿀 때,
int decimalNumber = 15;
Strng binaryNumber = Integer.toString(decimalNumber, 2); // 2진수로 바꾸는 코드
이렇게 1주차 미션을 마무리했다.
이번주는 구현 문제 위주로 어렵지 않았지만 다음주부터는 다양한 유형의 문제를 만나볼 수 있을만큼 더욱 기대가 된다.
화이팅~
반응형