자료구조와 알고리즘/🥑알고리즘

[알고리즘][해시 테이블] - 4.상위 K 빈도 요소

얄루몬 2022. 3. 9. 22:46

 

📖이 포스팅은 '파이썬 알고리즘 인터뷰 - 박상길님' 책을 보고 작성되었습니다.


😎문제 : 

상위 K번 이상 등장하는 요소를 추출하라


[Counter를 이용한 음수 순 추출]

import collections
import heapq


class Solution:
    def topKFrequent(self, nums: List[int], k: int) -> List[int]:
        freqs = collections.Counter(nums)
        heap = []
        for i in freqs:
            heapq.heappush(heap, (-freqs[i],i))
        topk = list()
        for _ in range(k):
            topk.append(heapq.heappop(heap)[1])
        return topk

[파이썬 다운 방식]

import collections

class Solution:
    def topKFrequent(self, nums: List[int], k: int) -> List[int]:
        return list(zip(*collections.Counter(nums).most_common(k)))[0]
  • collections.Counter(nums).most_common(k)
    • [(1,3), (2,2)]를 뽑아준다.
  • zip( )
    • 2개 이상의 시퀀스를 짧은 길이를 기준으로 일대일 대응하는 새로운 튜플 시퀀스를 만드는 역할을 한다. 
  • * (아스테리스크 - Asterisk)
    • unpack을 의미하며 시퀀스를 풀어 헤치는 연산자를 뜻한다. 주로 튜플, 리스트를 언패킹하는 데 사용한다. 
    • list로 되어 있는 것을 문자열로 바로 보여줄 수 있다.