
소스 코드
# -*- 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진수로 변환하는 과정을 정리할 수 있었다.
'Computer Science > Algorithm' 카테고리의 다른 글
| [구름톤 챌린지] Day10 : GameJam (2) | 2023.08.27 |
|---|---|
| [구름톤 챌린지] Day9 : 폭탄 구현하기(2) (0) | 2023.08.27 |
| [구름톤 챌린지] Day4 : 완벽한 햄버거 만들기 (0) | 2023.08.20 |
| [백준] 7579번 : 앱 (Python) (0) | 2023.05.02 |
| [백준] 12865번 : 평범한 배낭 (Python) (0) | 2023.05.01 |