문제
풀이
from collections import Counter
class Solution:
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
frequency = sorted(Counter(nums).items(), key=lambda x: -x[1])
return [item[0] for item in frequency[0:k]]
파이썬 기본 해시맵인 Dictionary를 이용해서 풀었다. 리스트를 정렬해 리턴해주는 sorted
를 람다 키를 사용해 역순으로 정렬한 다음, 처음 k
개 요소를 리턴하면 된다.
정렬 대신에 heapq
를 사용할까도 했는데 파이썬은 리스트 자체의 연산이 워낙 자유로워서 그냥 리스트로 풀었다.
Pythonic solution으로는 다음과 같은 것도 가능하다.
Class Solution:
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
return list(zip(*collections.Counter(nums).most_common(k)))[0]
먼저 내장 모듈 Counter
를 사용해서,
collections.Counter(nums).most_common(k)
최빈 튜플 k개를 추출한다. 튜플이 키와 빈도값으로 이루어져 있으므로 zip
을 사용해 각각을 generator로 만든 다음, list로 변환한다. 첫 번째 원소가 키값이므로 원하는 정답이 된다.