[LeetCode] Sort Integers by The Number of 1 Bits

준규·2022년 12월 22일

1.문제


You are given an integer array arr. Sort the integers in the array in ascending order by the number of 1's in their binary representation and in case of two or more integers have the same number of 1's you have to sort them in ascending order.

Return the array after sorting it.


정수 배열이 주어질 때 각 숫자들을 이진수로 변환 했을 때 1의 갯수 기준 오름차순 정렬하라. 만약 1의갯수가 같다면 10진수였을 때의 값의 오름차순으로 정렬하면 된다.


Example 1

Input: arr = [0,1,2,3,4,5,6,7,8]
Output: [0,1,2,4,8,3,5,6,7]
Explantion: [0] is the only integer with 0 bits.
[1,2,4,8] all have 1 bit.
[3,5,6] have 2 bits.
[7] has 3 bits.
The sorted array by bits is [0,1,2,4,8,3,5,6,7]

Example 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]
Explantion: All integers have 1 bit in the binary representation, you should just sort them in ascending order.

Constraints:

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

2.풀이

  1. sort 메소드를 이용한다.
  2. 각 숫자들을 2진수로 변환한 문자열에서 0을 모두 ''로 치환 한 다음 남은 1의 갯수를 기준으로 오름차순 정렬한다.

/**
 * @param {number[]} arr
 * @return {number[]}
 */
const sortByBits = function (arr) {
  arr.sort(
    (a, b) =>
      a.toString(2).replace(/0/g, "").length -
        b.toString(2).replace(/0/g, "").length || a - b // 2진수로 바꾸어서 '0'을 없앤 후 남은 1의 갯수로 오름차순 정렬한다. 만약 1의 갯수가 같다면 10진수 상태로 오름차순 정렬한다.
  );

  return arr;
};

3.결과

profile
안녕하세요 :)

0개의 댓글