Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python의 이진 표현에서 1 카운트를 기반으로 숫자를 정렬하는 프로그램

<시간/>

num으로 된 숫자 목록이 있다고 가정합니다. 각 숫자에 대한 이진 표현에 있는 1의 수에 따라 목록을 오름차순으로 정렬해야 합니다. 두 숫자의 1의 개수가 같으면 값에 따라 정렬합니다.

따라서 입력이 nums =[4, 1, 12, 7, 6]과 같으면 출력은 [1, 4, 6, 12, 7]이 됩니다. 왜냐하면 -

  • 4의 이진 형식은 0100입니다.
  • 1의 이진 형식은 0001입니다.
  • 6의 이진 형식은 0110입니다.
  • 12의 이진 형식은 1100입니다.
  • 7의 이진법 형식은 0111입니다.

따라서 배열은 [1, 4, 6, 12, 7]이며, 값이 작기 때문에 1이 먼저 오고, 같은 이유로 6이 먼저 옵니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 함수 비교를 정의합니다. 숫자 n이 필요합니다.
  • (n의 이진 형식에서 1개, n의 값) 쌍 p를 반환합니다.
  • 비교하기 전에 각 값을 비교 함수에 전달하여 숫자 정렬
  • 반환 번호.

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

def solve(nums):
   nums.sort(key=lambda num: (bin(num).count("1"), num))
   return nums

nums = [4, 1, 12, 7, 6]
print(solve(nums))

입력

[4, 1, 12, 7, 6]

출력

[1, 4, 6, 12, 7]