알고리즘

[구름톤 챌린지] Day 5 - 이진수 정렬

motti 2023. 8. 18. 16:31
반응형

https://level.goorm.io/l/challenge/goormthon-challenge

 

구름LEVEL

난이도별 다양한 문제를 해결함으로써 SW 역량을 향상시킬 수 있습니다.

level.goorm.io

문제


풀이

n,k = map(int,input().split())
arr = list(map(int,input().split()))

def num_sort(arr):
	"""
	숫자와 이진수로 변환했을때 1의 갯수가 튜플 형태로 저장된 리스트 출력
	"""
	answer = []
	for i in range(len(arr)):
		one = 0 
		num = arr[i] 
		while num != 0: #이진수에서 1의 갯수를 구하기
			one += num%2 # 나누었을때 1라면 더하기 
			num = num//2 
		answer.append((arr[i],one))
	return answer

res = num_sort(arr) 
res = sorted(res,key = lambda x : (x[1],x[0]), reverse = True) # 처음에는 x[1]의 값으로 정렬 후 x[0]의 값으로 재정렬
print(res[k-1][0]) # k번째 위치에 있는 x[0]을 요구하는게 답

1. 주어진 배열에서 이진수로 나타냈을때, 1의 개수를 one이라는 변수로 저장

2. 기존 값과 one을 튜플로 저장해서 answer이란 리스트에 저장

3. answer에서 x[1](one의 값)을 기준으로 정렬 후 x[0](기존 값)으로 재정렬

4. k 번째 위치에 있는 x[0](기존 값) 출력

반응형