문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
정수 배열 arr가 주어진다. 배열에 있는 정수들을 이진 표현에서 1의 개수를 기준으로 정렬하고 두 개 이상의 정수가 같은 개수의 1을 가진다면 오름차순으로 정렬해라.
정렬된 배열을 반환해라.
#1
Input: arr = [0, 1, 2, 3, 4, 5, 6, 7, 8]
Output: [0, 1, 2, 4, 8, 3, 5, 6, 7]
Explanation: [0]은 오직 0비트를 가진 정수이다.
[1, 2, 4, 8]은 모두 1비트를 가진다.
[3, 5, 6]은 2비트를 가진다.
[7]은 3비트를 가진다.
비트 기준으로 정렬된 배열은 [0, 1, 2, 4, 8, 3, 5, 6, 7]이다.
#2
Input: arr = [1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1]
Output: [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]
Explanation: 이진 표현에서 모든 정수는 1비트를 가지므로 오름차순 정렬만 하면 된다.
class Solution {
public int[] sortByBits(int[] arr) {
Integer[] temp = new Integer[arr.length];
for(int i = 0; i < arr.length; i++){
temp[i] = arr[i];
}
Arrays.sort(temp, (a, b) -> {
int bitA = Integer.bitCount(a);
int bitB = Integer.bitCount(b);
if(bitA == bitB){
return a - b;
}
return bitA - bitB;
});
for(int i = 0; i < arr.length; i++){
arr[i] = temp[i];
}
return arr;
}
}