Given an integer array nums
and an integer k
, return the k
most frequent elements. You may return the answer in any order.
Example 1
Input: nums = [1,1,1,2,2,3], k = 2
Output: [1,2]
Example 2
Input: nums = [1], k = 1
Output: [1]
Counter()
란?
collections
모듈의 클래스로 중복된 데이터가 저장된 배열을 인자로 넘기면 각 원소가 몇 번씩 나오는지 저장된 객체를 출력한다.
(이 때, 결과값은 내림차순으로 나오지만 빈도 수가 같다면 index 값이 낮은 값 부터 나오는 듯 하다.)예시
arr = [1, 2, 3, 3, 3, 2, 3, 1, 1, 2]
일때Counter(arr)
을 하면Counter({3: 4, 1: 3, 2: 3})
의 키:밸류 값을 가진 dictionary 형태의 결과값을 출력한다.
most_common()
이란?
Counter()
클래스의 메서드로Counter()
의 결과값을 튜플 요소를 가진 리스트의 형태로 바꿔서 출력해준다.예시
arr = [1, 2, 3, 3, 3, 2, 3, 1, 1, 2]
일 때,Counter(arr).most_common()
의 결과값은[(3, 4), (1, 3), (2, 3)]
이다.
배열 nums
가 주어지고, 구하고자 하는 최빈값의 갯수인 k
가 주어진다.
이 때, nums
배열에서 가장 많이 등장하는 숫자를 k
개만큼 구해주면 된다.
일단 우리는 파이썬의 Counter()
를 사용해 nums
에서 가장 많이 등장하는 수를 알아 볼 수 있다.
Counter()
로 dict 형태의 결과값을 얻었다면 다시 most_common()
메소드를 통해 이 결과값을 튜플 형태의 요소를 가진 리스트로 출력해준다.
우리는 어떤 녀석이 몇번 나왔는지가 아닌 어떤 녀석이 최빈값인지 궁금하기 때문에 리스트 안의 튜플 첫 번째 값이 필요하다.
또, k
만큼의 최빈값을 구해야하므로 while문을 이용해 코드는 아래와 같이 작성이 가능하다.
def topKFrequent(self, nums: list[int], k: int) -> list[int]:
result = []
c = Counter(nums)
mc = c.most_common()
i = 0
while i < k:
result.append(mc[i][0])
i = i + 1
return result