[CodeKata] top_k (python)

Wonbin Lee·2022년 3월 27일
0

algorithm diary

목록 보기
3/3

문제 : 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 문 자체조건으로 주면 코드가 좀 더 간결해진다.

profile
Developer who level up every day ✌️

0개의 댓글