알고리즘/프로그래머스

[구름톤 챌린지] 1주 차 5일차 학습 일기

김보통김보름 2023. 8. 18. 23:24
728x90
반응형

 

 

문제.5 이진수 정렬

 

N,K = map(int, input().split())
nums = list(map(int, input().split()))

# 2진수로 변경
for i in range(len(nums)):
	nums[i] = bin(nums[i])
	


sorted_binary_list = sorted(nums, key=lambda binary: (binary.count('1'), int(binary, 2)), reverse=True)
result = [int(i, 2) for i in sorted_binary_list]

print(result[K-1])

 

bin함수는 10진수를 2진수로 변환시킨다.

for i in range(len(nums)):
	nums[i] = bin(nums[i])

 

key는 정렬 순서를 결정하는 함수를 지정하는 매개변수입니다.

sorted_binary_list = sorted(nums, key=lambda binary: (binary.count('1'), int(binary, 2)), reverse=True)

lambda binary

(binary.count('1'), int(binary, 2))은 이진 문자열(binary)을 가져와 두 값으로 구성된 튜플을 반환하는 람다 함수

 

binary.count('1')

이진 문자열 내 '1'의 개수를 계산합니다. 이것은 주요 정렬 기준으로 사용됨


int(binary, 2)

이진 문자열을 2진법(이진)으로 변환하여 정수로 변환합니다. 이것은 보조 정렬 기준으로 사용됨


reverse=True는 목록을 내림차순으로 정렬하는 데 사용됩니다(높은 값부터 낮은 값으로).

 

 

728x90