본문 바로가기
Algorithm/프로그래머스

[힙(Heap)] 더 맵게

by seeker00 2021. 12. 16.

힙(Heap) - 더 맵게

간단하게 파이썬의 힙을 이용했다. 파이썬의 heapq 모듈은 최소 힙으로만 구현되어 있는데, 이 문제는 최소 힙을 활용하면 되는 거라 간단히 풀이가 가능했다.
여전히 분기를 깔끔하게 잘 하는 건 노력이 필요할 것 같다.

import heapq

def solution(scoville, K):

    answer = 0
    heapq.heapify(scoville)

    while (scoville):

        min1 = heapq.heappop(scoville)

        if min1 >= K: return answer
        if not scoville: break
        else:
            min2 = heapq.heappop(scoville)
            temp = min1+min2*2
            heapq.heappush(scoville, temp)
            answer += 1

    return -1
  • 시간 초과가 나는 단순 정렬 풀이
    단순히 매번 전체 리스트를 정렬하는 것과 달리 힙은 삽입과 삭제를 하면서 항상 자료 구조를 유지하기 위한 동작을 수행한다. 이 때의 시간 복잡도는 O(log n)이 소요된다.
    힙 구조를 이용해서 삽입/삭제를 수행하는 것이 속도 측면에서 훨씬 효율적일 수 밖에 없을 것이다.
def solution(scoville, K): 
    answer = 0

    while (scoville):
        scoville.sort(reverse=True)     
        min1 = scoville.pop()

        if min1 >= K: return answer
        if not scoville: break
        else:
            min2 = scoville.pop()
            temp = min1+min2*2
            scoville.append(temp)
            answer += 1

    return -1

'Algorithm > 프로그래머스' 카테고리의 다른 글

2023 현대모비스 예선 - 상담원 인원  (0) 2023.09.29
[해시] 베스트앨범  (0) 2021.12.16
[깊이/너비 우선 탐색(DFS/BFS)] 타겟 넘버  (0) 2021.12.07
[해시] 위장  (0) 2021.09.24
[해시] 전화번호 목록  (0) 2021.09.16