LeetCode 347. Top K Frequent Elements
주어진 숫자 리스트에서 가장 많이 출현한 숫자를 k
개 구하는 문제다.
class Solution:
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
dict = {}
for num in nums:
if num in dict:
dict[num] += 1
else:
dict[num] = 1
sorted_list = sorted(dict.items(), key=lambda x:x[1], reverse=True)
result = []
for i in range(k):
result.append(sorted_list[i][0])
return result
key
로 존재하면 해당 값에 1을 더한다.key
로 추가한 후에 value
를 1로 설정한다.k
만큼 추출해 result
배열에 추가한다.실행시간이 만족스럽지 않아 다른 풀이를 찾아보던 중 defaultdict
라는 것을 발견했다.
defaultdict
defaultdict
는 collections
모듈을 통해 제공되고 dict
클래스의 서브 클래스다.
기존 딕셔너리에서는 key
를 통한 접근이 이루어질 때 key
의 값이 없을 때 keyError가 발생한다.
(위 코드에서 if문을 사용한 이유)
하지만 defaultdict
는 key
값이 없을 때 key
값을 만들어 default값을 자체적으로 생성해준다.
이를 활용해 코드를 수정해 보았다.
from collections import defaultdict
class Solution:
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
dict = defaultdict(int)
for num in nums:
dict[num] += 1
sorted_list = sorted(dict.items(), key=lambda x:x[1], reverse=True)
result = []
for i in range(k):
result.append(sorted_list[i][0])
return result
실행시간은 그대로였지만.. 코드는 깔끔해졌다!