[LeetCode] 347. Top K Frequent Elements

Sungwoo·2024년 11월 3일
0

Algorithm

목록 보기
7/43
post-thumbnail

📕문제

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
defaultdictcollections모듈을 통해 제공되고 dict클래스의 서브 클래스다.
기존 딕셔너리에서는 key를 통한 접근이 이루어질 때 key의 값이 없을 때 keyError가 발생한다.
(위 코드에서 if문을 사용한 이유)
하지만 defaultdictkey값이 없을 때 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

실행시간은 그대로였지만.. 코드는 깔끔해졌다!

0개의 댓글