코드카타 top_k

박대현·2021년 10월 31일
0

문제

nums는 숫자로 이루어진 배열입니다.

가장 자주 등장한 숫자를 k 개수만큼 return 해주세요.

나의 풀이

in

정수형 배열, 반환할 개수

out

가장많이 등장한 숫자를 k개수만큼 반환

how

  1. 가장많이 등장한 숫자 찾기
  2. 반환후 가장큰 숫자 제거 그 다음으로 가장 많이 등장한 숫자 찾기
def top_k(nums, k):
  nums_list=[]
  i=0
  while i<k:
    nums_list.append(max(nums, key=nums.count))
    nums = [i for i in nums if i not in nums_list]
    i += 1
  return nums_list

다른 풀이

def top_k(nums, k):
  set_nums = set(nums)
  result = [(target, nums.count(target)) for target in set_nums]
  result.sort(key = lambda x : -x[1])
  return [result[i][0] for i in range(k)]
nums = [1,1,1,2,2,3]
k = 2

튜플을 이용한 풀이 방법이다. 사실 튜플을 이용한다는 생각을 전혀 안해봤고, 이용할 방법도 딱히 생각나지 않았는데, 이 풀이를 보면서 알고리즘 풀이과정에 튜플을 이렇게 이용할 수 있구나 감탄했다. 딕셔너리 형태의 자료형을 볼 때 항상 튜플을 염두에 두고 풀이해야겠다.

0개의 댓글