1046. Last Stone Weight

Du Hwan Jang·2023년 1월 6일

알고리즘(leetcode)

목록 보기
5/7

Last Stone Weight - LeetCode

class Solution:
    def lastStoneWeight(self, stones: List[int]) -> int:
        while stones and stones[-1]:
            stones = heapq.nsmallest(len(stones), stones)
            if len(stones) == 1:
                return stones.pop()
            elif len(stones) == 2:
                return stones.pop() - stones.pop()
            item1 = stones.pop()
            item2 = stones.pop()
            if item1 - item2 is not 0:
                stones.append(item1 - item2)

결과 runtime : 30ms 96.20%

근데 이렇게 사용하는거면 그냥 sort쓰는게 맞지 않나 생각?

다른 사람들은 어떻게 풀었나 확인해보니

class Solution:
    def lastStoneWeight(self, stones: List[int]) -> int:
        stones = [-stone for stone in stones]
        heapq.heapify(stones)
        while len(stones) > 1:
            y = heapq.heappop(stones)
            x = heapq.heappop(stones)
            if x != y:
                heapq.heappush(stones, y - x)
        return -stones[0] if stones else 0

다른 사람들이 푼 결과는 이렇다.

그러니까 heapq는 모듈이고 그걸 그대로 활용하는데 요소들의 값을 다 마이너스로 바꾸고 마이너스로 바뀐 요소를 힙 정렬해버리면 큰수대로 이진트리로 정렬되고 최종 결과에 -만 붙여서 반영하면 됨

참고 url 은 다음과 같다.

heapq - Heap queue algorithm

profile
life is collecting memories

0개의 댓글