Computer Science/백준

백준 11279번 최대 힙

Dior2ky 2021. 8. 27. 17:11
반응형

백준 11279번 최대 힙 문제이다.

 

문제는 다음과 같다. 

 

문제를 보면 최대 힙 문제는 최소 힙 문제와 비슷하다. 

처음엔 최소 힙 문제에서 pop을 배열의 마지막을 하면 되지 않을까 생각했다.

생각한대로 구현 후 출력을 하니 생각과 많이 달랐다. heap에서의 순서는 배열의 순서를 그대로 따라가지 않았다. 

트리구조를 그대로 출력한다고 생각하면 이해가 빠르게 될 것이다. 

 

그래서 힙 자체를 변형을 시키기로 했다 최소값이 맨 앞으로 오는 구조이기 때문에 이를 바꾸어 최댓값이 맨 앞으로 오도록 만들기로 했다. 

값에 -를 붙이면 제일 큰수가 제일 작은수로 바뀌어 맨앞에 저장이 되고

출력할때만 다시 -을 붙여 출력하면 되는 것이다.

 

코드는 다음과 같다. 

import sys
import heapq

n = int(sys.stdin.readline().strip())
arr = []
for i in range(n):

    ins = sys.stdin.readline().strip()
    ins = int(ins)
    if ins == 0:
        if len(arr) == 0:
            print(0)
        else:
            print(heapq.heappop(arr)*(-1))
    else:
        heapq.heappush(arr, -ins)

 

원리만 이해하면 쉽게 구현이 가능했다.

 

성공!

반응형

'Computer Science > 백준' 카테고리의 다른 글

백준 2630번 색종이 만들기  (0) 2021.08.30
백준 1655번 가운데를 말해요  (0) 2021.08.30
백준 1927번 최소 힙  (0) 2021.08.27
백준 11286번 절댓값 힙  (0) 2021.08.27
백준 5430번 AC  (0) 2021.08.18