가장 빈도가 잦은 숫자를 K순위까지 뽑는 문제이다.
- 딕셔너리를 사용해 각 숫자의 개수를 저장한다.
- 딕셔너리를 value 값을 기준으로 내림차순 정렬한다.
- k번째 값까지 꺼내온다.
class Solution:
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
d = {}
for i in range(len(nums)): # O(n)
if nums[i] not in d: d[nums[i]] = 0
d[nums[i]] += 1
d = sorted(d.items(), key = lambda item: item[1], reverse = True) # O(nlogn)
nums[:] = []
for i in range(k): nums.append(d[i][0])
return nums
총 시간 복잡도는 O(nlogn) 이다.