문제 : nums는 숫자로 이루어진 배열입니다.
가장 자주 등장한 숫자를 k 개수만큼 return 해주세요.
#ex
nums = [1,1,1,2,2,3],
k = 2
return [1,2]
nums = [1]
k = 1
return [1]
풀이
def top_k(nums, k):
result = {}
max_result = []
for i in nums:
result[i] = nums.count(i)
while True:
max_num = max(result, key = lambda j: result[j])
max_result.append(max_num)
del result[max_num]
if len(max_result) == k:
break
return max_result
우선 빈 딕셔너리(result)와 리스트(max_result)를 하나씩 만들어준다.
그리고 전달받은 nums 리스트를 반복문을통해 리스트안의 요소들과 해당 요소들의 각 개수를딕셔너리(result)에 키와 벨류로 넣어준다.
while문 안에서 딕셔너리(result)의 벨류값을 기준으로 최대값을 뽑아내줄 수 있도록, max 함수의 key를 lambda j: result[j]
로 지정해준다.
그리고 뽑아낸 최대값이 담긴 딕셔너리(result)의 키를 빈리스트(max_result)에 담아준다.
만약 리스트(max_result) 의 len값이 전달받은 k값이되면 break을 통해 while문을 멈춰주고, 리스트(max_result)를 반환해준다.
def top_k(nums, k):
result = {}
max_result = []
for i in nums:
result[i] = nums.count(i)
while len(max_result) < k:
max_num = max(result, key = lambda j: result[j])
max_result.append(max_num)
del result[max_num]
return max_result
그리고 break의 조건을 이렇게 while 문 자체조건으로 주면 코드가 좀 더 간결해진다.