[LeetCode] Sort Integers by the Number of 1 Bits

아르당·2026년 4월 24일

LeetCode

목록 보기
281/303
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

정수 배열 arr가 주어진다. 배열에 있는 정수들을 이진 표현에서 1의 개수를 기준으로 정렬하고 두 개 이상의 정수가 같은 개수의 1을 가진다면 오름차순으로 정렬해라.

정렬된 배열을 반환해라.

Example

#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비트를 가지므로 오름차순 정렬만 하면 된다.

Constraints

  • 1 <= arr.length <= 500
  • 0 <= arr[i] <= 10^4

Solved

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;
    }
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글