[구름톤 챌린지] Day5. 이진수 정렬

2023. 8. 19. 12:38·Algorithms(CT)/Goorm
 

구름LEVEL

난이도별 다양한 문제를 해결함으로써 SW 역량을 향상시킬 수 있습니다.

level.goorm.io

 

문제 설명

N개의 10진수 정수가 주어진다. 이를 아래의 기준에 따라 정렬하기로 한다.

  1. 10진수 정수를 2진수로 나타냈을 때, 2진수에 포함된 1의 개수를 기준으로 내림차순 정렬한다.
  2. 1의 개수가 같다면, 원래 10진수를 기준으로 내림차순 정렬한다.

플레이어가 정수를 잘 정렬했을 때, 앞에서 K번째에 위치한 수는 어떤 수가 될지 구해보자.

 

입력

첫째 줄에 주어지는 정수의 수 N과 플레이어가 찾으려는 정수의 위차 K가 공백을 두고 주어진다.

둘째 줄에는 a1, a2,... 이 공백을 두고 주어진다.

8 6
1 2 3 4 5 6 7 8

풀이과정

1. 2차원배열을 만들어 num[i][0]에는 주어진 10진수를 넣고, num [i][1]에는 2진수로 만들었을 때의 1의 개수를 저장합니다.

int[][] num = new int[n][2];
s = br.readLine().split(" ");
for(int i=0;i<n;i++){
	num[i][0]=Integer.parseInt(s[i]);
    
    int number = num[i][0];
    while(number>1){//2진수만들기
    	num[i][1]+=number%2;//2진수를 만들면서 1 개수 count
        number/=2;
    }
    num[i][1]+=1;
}

 

2. 만든 2차원 배열을 주어진 조건에  따라 정렬합니다.

2가지 조건 이상으로 정렬을 하기 위해서는 Comparator을 사용해 정렬합니다.

Arrays.sort(num, new Comparator<int[]>(){
	public int compare(int[] a, int[] b){
    	if(a[1]!=b[1]) return b[1]-a[1];
        else return b[0]-a[0];
    }
});

  

3. 정렬된 수들 중에서 k번째 수를 반환합니다.


전체 코드

import java.io.*;
import java.util.*;
class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String[] s = br.readLine().split(" ");
		int n = Integer.parseInt(s[0]);
		int k = Integer.parseInt(s[1]);
		
		int[][] num = new int[n][2];//주어진 수:[0] / 2진수 1개수:[1]
		s = br.readLine().split(" ");
		for(int i=0;i<n;i++){
			num[i][0]=Integer.parseInt(s[i]);
			
			int number = num[i][0];
			while(number>1){
				num[i][1]+=number%2;
				number/=2;
			}
			num[i][1]+=1;
		}
		//2진수에서 1의 개수 내림차순, 10진수 내림차순으로 정렬
		Arrays.sort(num, new Comparator<int[]>(){
			public int compare(int[] a, int[] b){
				if(a[1]!=b[1]) return b[1]-a[1];
				else return b[0]-a[0];
			} 
		});
		
		System.out.println(num[k-1][0]);//k번째 수 출력
	}
}

문제 후기

 

확실히 뒤에 이틀은 문제 난이도가 ★★여서 그런지 확실히 바로 풀지는 못하고 조금 생각한 뒤에 푸는 문제들이었습니다.

특히 다음날 정답을 확인하면 제가 푼 방식과 다르게 훨씬 더 쉬운 방법으로 풀 수 있는 풀이가 많아서 많이 배울 수 있었습니다.

특히 2진수에서 1을 세는 방법을 저는 while문을 사용해서 하나하나 다 세어주었지만 

bitCount를 활용해 한줄로 처리할 수 있다는 것을 배울 수 있어서 좋은 문제였다고 생각합니다.

 

다들 구름톤 챌린지 파이팅 해서 매일매일 성장하자고요!!~!

'Algorithms(CT) > Goorm' 카테고리의 다른 글

[구름톤 챌린지] Day12 발전기 (Java)  (0) 2023.08.29
[구름톤 챌린지] Day11 통증 (2)  (0) 2023.08.29
[구름톤 챌린지] Day8. 통증 (Java)  (0) 2023.08.23
[구름톤 챌린지] Day7 구름 찾기 깃발 (Java)  (0) 2023.08.23
[구름톤 챌린지] Day1. 운동 중독 플레이어 (Java)  (0) 2023.08.16
'Algorithms(CT)/Goorm' 카테고리의 다른 글
  • [구름톤 챌린지] Day11 통증 (2)
  • [구름톤 챌린지] Day8. 통증 (Java)
  • [구름톤 챌린지] Day7 구름 찾기 깃발 (Java)
  • [구름톤 챌린지] Day1. 운동 중독 플레이어 (Java)
gwee_99
gwee_99
bE bETTER!
  • gwee_99
    얼렁이와 뚱땅이
    gwee_99
  • 전체
    오늘
    어제
    • ====Category====
      • Algorithms(CT)
        • Programmers
        • Baekjoon
        • Goorm
      • Web
        • Error 해결
      • BackEnd
        • Spring
        • JPA
      • FrontEnd
        • HTML.CSS
        • JavaScript
      • Language
        • Java
      • Cloud
      • CSTS
      • Books
        • IT 5분 잡학사전
      • 일상
  • 블로그 메뉴

    • 홈
    • 방명록
    • 글쓰기
    • 관리
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    HTML
    LV.3
    IT 잡학사전
    lv2
    호텔 대실
    개발자북클럽
    백준
    존안님
    BFS
    자바
    노마드코더
    따라하며 배우는 html css
    Lv.1
    IT 5분 잡학사전
    구름톤 챌린지
    BOJ
    프로그래머스
    Til
    스택
    lv.4
    제대로 파는 자바스크립트
    Greedy
    DFS
    코딩테스트
    구름
    java
    인프런
    LV.2
    DP
    그리디
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gwee_99
[구름톤 챌린지] Day5. 이진수 정렬
상단으로

티스토리툴바