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]