Code KATA | # 7

문제

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

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

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

문제 접근 방식

문제의 중점 파악

  • 리스트의 요소별 갯수 파악
  • 가장 많은 갯수의 요소를 k갯수만큼 순차적으로 return

이 세가지에 대한 해결 방식으로

요소벌 갯수를 딕셔너리로 저장

  • for문을 사용하여 요소의 갯수를 count매서드를 통해 갯수 입력, 이미 갯수를 센 요서이면 continue로 건너 뛰기
  • for문을 이용하여 최대값을 k값의 range만큼 반복하여 뽑아내고 결과 리스트에 저장하기.
  • max 함수의 lambda 옵션을 주어서, value 값의 최대값을 선별하고 key 값을 뽑아내기

나의 코드

def top_k(nums, k):
    num_dic={}
    for i in nums:
        if i in num_dic:
            continue
        num_dic.update({i:nums.count(i)})

    result=[]
    for i in range(k):
        max_num=max(num_dic, key=lambda x:num_dic[x])
        result.append(max_num)
        num_dic.pop(max_num)
    
    return result

다른 방법

앞서 사용한 collections의 Counter 함수를 이용하여 첫 번째 단계인 요소별 갯수를 저장한 딕셔너리를 만드는 과정을 단축 시킬수가 있다.

from collections import Counter
num_dic=Counter(nums)

What I Learnt

max 함수의 lambda 형식

lambda는 해당 인자를 어떠한 표현식으로 가공하여 결과값을 낼때 사용한다. 이번 max함수에서는 value의 최대값을 판별하였고 조건에 맞는 값에 대한 key값을 내기 위해 max함수의 판별 대상이 value가 되겠끔 lambda 대상 key인 x를 value로 지정하였다.

좋은 웹페이지 즐겨찾기