평소에 즐겨 이용하던 구름 IDE에서 약 한달 가량의 챌린지를 진행한다고 해서 시작하게 되었다.
4주간 매일 10시에 올라오는 알고리즘 문제 하나씩 풀면 블록을 받고, 블록 18개 이상이면 오프라인 챌린지에 참가할 기회를 얻을 수 있다!
알고리즘 문제를 푼지도 꽤 지나서 오랜만에 문제도 풀 겸 도전하게 되었다.
직전 게시물에 이어 1주차 문제를 마저 풀게 되었다. 첫 번째 주는 구현 중심의 문제로 구성되어 있으며 솔브드 티어 브론즈 정도에 해당하는 난이도였다.
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])