728x90
https://level.goorm.io/exam/195687/%EC%9D%B4%EC%A7%84%EC%88%98-%EC%A0%95%EB%A0%AC/quiz/1
728x90
내 생각
2진수로 바꿨을 때, 1의 개수를 세고 이를 조건에 맞게 정렬해 주면 된다.
나는 1의 개수를 세는 것을 비트 연산자를 이용했고,
2차원 배열에 원래의 10진수 값과 1의 개수를 저장해 정렬해 주었다.
import java.io.*;
import java.util.*;
class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
int[][] arr = new int[N][2]; // arr[i][0] := 원래의 10진수 값, arr[i][1] := 2진수로 변환했을 때의 1의 개수
st = new StringTokenizer(br.readLine());
for(int i = 0; i < N; i++) {
int num = Integer.parseInt(st.nextToken());
int tmp = num;
int n = 0; // 1의 개수
while(tmp > 0) { // 비트 연산을 이용하여 1의 개수 세기
if((tmp & 1) == 1) n++;
tmp = tmp >> 1;
}
arr[i][0] = num;
arr[i][1] = n;
}
// 정렬
Arrays.sort(arr, (o1, o2) -> o1[1] == o2[1] ? o2[0] - o1[0] : o2[1] - o1[1]);
// 출력
System.out.println(arr[K - 1][0]);
}
}
728x90
'Problem Solving > goorm' 카테고리의 다른 글
[구름톤 챌린지 2주 차 학습 일기] 7일차 미션 문제 7. 구름 찾기 깃발 (java) (0) | 2023.08.22 |
---|---|
[구름톤 챌린지 2주 차 학습 일기] 6일차 미션 문제 6. 문자열 나누기 (java) (0) | 2023.08.21 |
[구름톤 챌린지 1주 차 학습 일기] 4일차 미션 문제 4. 완벽한 햄버거 만들기 (java) (0) | 2023.08.18 |
[구름톤 챌린지 1주 차 학습 일기] 3일차 미션 문제 3. 합 계산기 (java) (0) | 2023.08.18 |
[구름톤 챌린지 1주 차 학습 일기] 2일차 미션 문제 2. 프로젝트 매니징 (java) (0) | 2023.08.15 |