nums는 숫자로 이루어진 배열입니다.
가장 자주 등장한 숫자를 k 개수만큼 return 해주세요.
nums = [1,1,1,2,2,3],
k = 2
return [1,2]
nums = [1]
k = 1
return [1]
collections 모듈의 Counter 클래스를 사용하기 위해 제일 상단에 불러온다.
from collections import Counter
Counter
는 리스트나 문자열과 같은 시퀀스 자료형 안의 요소 중 값이 같은 것이 몇 개 있는지 반환해준다.
cnt
를 만들어준다.>>> nums = [2, 2, 2, 2, 3, 3, 1, 2, 1, 3]
>>> cnt = Counter(nums)
>>> print(cnt)
Counter({2: 5, 3: 3, 1: 2})
nums
라는 리스트를 위와 같이 주고 Counter
를 이용해 결과를 확인해 보면 값의 개수(value값)를 기준으로 정렬되어 딕셔너리 형태로 반환된 것을 확인할 수 있다.
객체의 데이터 중에서 특정한 데이터를 기준으로 정렬하기 위해 key 매개변수로 정렬을 하기 전에 각 요소에 대하여 적용되는 함수를 지정할 수 있다.
result = sorted(cnt, key=lambda x: cnt[x], reverse=True)[:k]
lambda
는 정렬을 하기 전에 호출되는 함수를 나타낸 것이다.
value값을 기준으로 정렬하기 위해 cnt
요소를 받아서 cnt
의 value값 즉, cnt[x]
를 정렬 기준으로 정한다.
개수가 많은 것부터 적은 것 순으로 정렬(내림차순 정렬) 해야 하므로 reverse=True
를 넣어준다.
여기까지의 진행상태로 결과값을 확인해보면 아래와 같은 결과가 나온다.
[2, 3, 1]
하지만 우리는 특정값 k를 주면 그에 해당하는 개수만큼의 숫자를 반환해야 하므로 [:k]
를 이용하여 k-1번째까지의 숫자, k개수만큼의 숫자를 반환할 수 있다.
from collections import Counter
def top_k(nums, k):
cnt = Counter(nums)
result = sorted(cnt, key=lambda x: cnt[x], reverse=True)[:k]
return result