기술(Tech, IT)/리트코드(LeetCode)

[LeetCode] 1244. Design A Leaderboard

Daniel803 2023. 8. 2. 07:59

 다른 함수들은 모두 간단히 구현이 가능하지만 top을 어떻게 구현하느냐에 따라 효율이 달라진다. list를 heap로 구성하는 heapify를 통해 max heap을 구현후 하나씩 pop하는 방식을 활용해 K개의 가장 높은 점수를 더해 반환했다.

import heapq
class Leaderboard:

    def __init__(self):
        self.dic = defaultdict(int)

    def addScore(self, playerId: int, score: int) -> None:
        self.dic[playerId] += score

    def top(self, K: int) -> int:
        ret = 0
        values = list(self.dic.values())
        n_values = [-val for val in values]
        heapq.heapify(n_values)
        for i in range(K):
            ret += heapq.heappop(n_values)
        return -ret
        

    def reset(self, playerId: int) -> None:
        self.dic[playerId] = 0