본문 바로가기
Computer Science/Algorithm

[구름톤 챌린지] Day5 : 이진수 정렬

by 유우석 2023. 8. 20.

소스 코드

# -*- coding: utf-8 -*-
# UTF-8 encoding when using korean
n, k = map(int, input().split())
arr = list(map(int, input().split()))
ans = []
for i in range(n):
	temp = arr[i]
	count = 0
	while temp >= 1:
		if temp % 2:
			count += 1
		temp //= 2
	ans.append((arr[i], count))
ans.sort(key = lambda x:(x[1], x[0]), reverse = True)
print(ans[k-1][0])

# 문제 풀이
# 입력받은 수 a를 2진수로 변한하는 과정을 거치되, 변환했을 때의 1의 개수만 센 후 (a, 1의 개수) 형태의 튜플로 만들어 새로운 리스트에 넣어준다
# 만들어진 새 리스트를 1의 개수값을 1순위, 원래 수를 2순위로 내림차순 정렬해준 후 K번째 원소를 출력한다.

문제 풀이

입력받은 배열의 원소를 각각 2진수로 변환한다. 변환하면서 1의 개수를 세 준 다음 (원소, 1의 개수) 형태의 튜플을 만들어서 새로운 리스트에 넣어준다.

만들어진 새 리스트를 Python 내장함수인 sort 함수를 이용하여 우선순위 키값을 정해주고 정렬한다.

정렬된 리스트의 K번째 값을 출력한다.

 

느낀 점

Python 내장함수를 잘 이용해서 쉽게 풀어냈던 것 같다. 만약 직접 정렬해야하는 일이 생기면 어떻게 해야할까? 상상하기 무섭다..

이 문제를 통해 10진수를 2진수로 변환하는 과정을 정리할 수 있었다.