작심삼일

[LeetCOde] 692 | Top K Frequent Words | Python 본문

스터디/코테

[LeetCOde] 692 | Top K Frequent Words | Python

yun_s 2022. 10. 19. 09:15
728x90
반응형

문제 링크: https://leetcode.com/problems/top-k-frequent-words/


문제

Given an array of strings words and an integer k, return the k most frequent strings.

Return the answer sorted by the frequency from highest to lowest. Sort the words with the same frequency by their lexicographical order.


조건

  • 1 <= words.length <= 500
  • 1 <= words[i].length <= 10
  • words[i] consists of lowercase English letters.
  • k is in the range [1, The number of unique words[i]]

내 풀이

dictionary를 이용해 word의 개수를 센다.

그러면 dictionary에는 각각 (word, 개수)로 저장이 된다.

이를 먼저 빈도수로 정렬하고, 그 후에 알파벳 순으로 정렬되어야 하기 때문에 key=lambda x:(-x[1], x[0])으로 정렬한다.

-x[1]은 개수가 큰 것부터 정렬되게하는 것이고, x[0]은 알파벳 순서다.

-x[1]을 x[0]보다 앞에 둔 이유는 먼저 빈도수로 정렬되어야 하기 때문이다.

 

그 후에 정렬된 dictionary를 앞에서부터 k개 뽑아서 리턴한다.


코드

class Solution:
    def topKFrequent(self, words: List[str], k: int) -> List[str]:
        freq = defaultdict(int)
        ans = []
        
        for word in words:
            freq[word] += 1
        
        freq = sorted(freq.items(), key=lambda x: (-x[1], x[0]))
        
        for i in range(k):
            ans.append(freq[i][0])
        
        return ans
728x90
반응형
Comments