[codekata] week2 day4

min00young·2020년 11월 15일
0

문제

nums는 숫자로 이루어진 배열입니다.
가장 자주 등장한 숫자를 k 개수만큼 return해주세요.

nums = [1,1,1,2,2,3],
k = 2

return [1,2]

nums = [1]
k = 1

return [1]

문제풀이

함수에게 전달되는 인자는 숫자로 구성된 배열이고, 그리고 가장 많이 등장하는 숫자순으로 몇개까지 배열형태로 리턴할지에 대한 문제입니다.

처음 생각해볼수있는것은 전달받은 배열에서 가장 많이 나오는 나오는 숫자값을 어떻게 찾을지 입니다.
딕셔너리를 새롭게 만들어서, 각 요소별로 몇개씩 존재하는지 정리하고, value를 기준으로 새롭게 정리하는방법과 그리고 그것을 몇개씩 return할지를 생각해봅니다.

파이썬에서는 배열에서 각요소별로 갯수가 몇개인지 제공하는 메서드를 제공합니다. 그것은 count()입니다. 반복문을 통해서 각요소별로 몇개씩 존재하는지에 대해서 딕셔너리를 만듭니다.

  target = {}
  
  for i in nums:
    target[i] = nums.count(i)

이제는 value를 기준으로 정렬을 해야하는데, 그것은 sorted메서드를 이용하고, 옵션값을 통해서 내림차순과 배열안에 튜플형태로 (key, value)들어가도록 설정을 합니다.

target = sorted(target.items(), key=lambda x: x[1], reverse=True)

이제는 담겨진 값을 몇개까지 return할지 받은 인자인 k값만큼 반복문을 입력합니다. 배열안에 튜플이 있는 구조이기때문에 target[i][0]이라고 입력함으로써 정확히 key만 결과에 담기도록 작업합니다.

최종적으로 함수가 동작하는것을 확인할수있습니다.

코드

def top_k(nums, k):
  
  result = []
  target = {}
  
  
  for i in nums:
    target[i] = nums.count(i)
  
  target = sorted(target.items(), key=lambda x: x[1], reverse=True)
  
  print(target)
  
  for i in range(k):
    result.append(target[i][0])
    print(result)
  
  return result
profile
개발공부를 하면서 배우고 경험하고 앞으로 알아가야할것들에 대해서 정리하고 있습니다 🙂

0개의 댓글