본문 바로가기
알고리즘/문제 풀이

[☁️ 구름톤 챌린지] 1주차 학습일지 - 2

by 위대한초밥V 2023. 8. 20.

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주차 미션을 마무리했다. 

이번주는 구현 문제 위주로 어렵지 않았지만 다음주부터는 다양한 유형의 문제를 만나볼 수 있을만큼 더욱 기대가 된다. 

화이팅~

반응형