구름톤 챌린지 1주차 학습일기 - 2

시온·2023년 8월 20일
0

챌린지

목록 보기
2/2

☁️ 구름톤 챌린지!

평소에 즐겨 이용하던 구름 IDE에서 약 한달 가량의 챌린지를 진행한다고 해서 시작하게 되었다.
4주간 매일 10시에 올라오는 알고리즘 문제 하나씩 풀면 블록을 받고, 블록 18개 이상이면 오프라인 챌린지에 참가할 기회를 얻을 수 있다!
알고리즘 문제를 푼지도 꽤 지나서 오랜만에 문제도 풀 겸 도전하게 되었다.

Week 1

직전 게시물에 이어 1주차 문제를 마저 풀게 되었다. 첫 번째 주는 구현 중심의 문제로 구성되어 있으며 솔브드 티어 브론즈 정도에 해당하는 난이도였다.

Day 5 : 이진수 정렬

10진수 정수를 2진수로 바꾼 뒤에, 2진수에 포함된 1의 개수를 기준으로 내림차순 정렬하는 문제이다. 처음에는 이진수로 바꾸는 함수를 몰라서 그냥 정수를 계속 2로 나눈 나머지가 1인지 체크했다. 이 방법은 단순하긴 하지만 코드가 좀 길어진다는 단점이 있다. 또한 딕셔너리를 사용해 { "10진수 정수" : "2진수로 바꾼 1의 개수" } 의 형태로 저장했는데, 이 딕셔너리를 정렬하는 것이 생각보다 어려웠다.
이러한 상황에서 bin() 함수를 알게 되었는데, 바로 10진수를 2진수로 변환해주는 함수이다. 단, str 형태로 리턴되며, 앞에 0b가 붙게 되니 이 부분을 지웠다.
정렬은 sorted() 함수를 사용하였으며, 정렬 기준에 해당하는 key=를 lambda 로 주었다.

정답

# -*- coding: utf-8 -*-
# UTF-8 encoding when using korean
n, k = map(int, input().split())

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

result = sorted(arr, key=lambda x: (bin(x)[2:].count('1'), x), reverse=True)
print(result[k-1])
profile
끊임없이 성장중

0개의 댓글