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로 지정하였다.
Author And Source
이 문제에 관하여(Code KATA | # 7), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jung2one/Code-KATA-7저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)