[알고리즘] 배열안의 가장 자주 등장하는 숫자를 K만큼 구하기

오늘 문제를 풀기위해 사용한 함수 또는 식

  • sort
  • set
  • lambda 형식

문제

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

예를들어 nums = [1,1,1,2,2,3], k = 2면
[1,2] return

내 코드

def top_k(nums, k):
  nums_list = []
  result = []

  for i in set(nums):
    nums_list.append((i,nums.count(i)))

  nums_list.sort(key=lambda x:x[1], reverse = True)

  for i in range(k):
    result.append(nums_list[i][0])
    
  return result

풀이

  • 배열안의 어떤 숫자가 몇개씩 있는지를 계산해서 넣어줄 빈 리스트와 결과 값을 담을 빈 리스트를 만들어준다.
  • 배열을 set 함수를 통해 중복값을 제거하여 for문을 돌려준다
  • for문을 통해 나온 수가 최초 배열안에 몇개씩 있었는지 count함수를 통해 계산한다.
  • 계산해서 나온 수를 튜플에 넣어 리스트에 append 해준다.(숫자, 숫자의 개수)
  • lambda 식을 이용하여 리스트 안의 튜플들을 [1] 인덱스를 기준으로 내림차순 해준다.
  • 내림차순 해준 수를 for 문을 돌려 k 숫자만큼 인덱스하여 result에 append 해준다.

좋은 웹페이지 즐겨찾기