Algorithm (Python, Java, SQL)/Inflearn Study

[Python Algorithm] 자료구조(힙) - 최대힙

sanadoing_ 2023. 3. 28. 14:11
728x90

> 자료구조 활용 - 스택, 큐, 해쉬, 힙 (힙 편)

최대힙은 부모가 두 자식보다 값이 크다 !

 

 

 

 

📖 문제 :  최대 힙

최대힙은 완전이진트리로 구현된 자료구조입니다. 그 구성은 부모 노드값이 왼쪽자식과 오른 쪽 자식노드의 값보다 크게 트리를 구성하는 것입니다. 그렇게 하면 트리의 루트(root)노드는 입력된 값들 중 가장 큰 값이 저장되어 있습니다. 예를 들어 5 3 2 1 4 6 7순으로 입력되면 최대힙 트리는 아래와 같이 구성됩니다.

최대힙 자료를 이용하여 다음과 같은 연산을 하는 프로그램을 작성하세요.

1) 자연수가 입력되면 최대힙에 입력한다.
2) 숫자 0 이 입력되면 최대힙에서 최댓값을 꺼내어 출력한다.

(출력할 자료가 없으면 -1를 출력한다.) 3) -1이 입력되면 프로그램 종료한다.

 

 

입력설명
첫 번째 줄부터 숫자가 입력된다. 입력되는 숫자는 100,000개 이하이며 각 숫자의 크기는 정 수형 범위에 있다.

 

출력설명
2) 연산을 한 결과를 보여준다.

 

입력예제 1

5

3

6

0

5

0

2

4

0

-1

 

출력예제 1

6
5
5

 

import sys
import heapq as hq

a = []
while True:
    n = int(input())
    if n == -1:
    	break
    if n == 0:
    	if len(a) == 0:
        	print(-1)
        else:
        	print(-hq.heappop(a))
    else:
    	hq.heappush(a, -n)

 


⭐️ 
Point ! ⭐️

  • heapq는 기본적으로 최소 힙으로 작동한다. 
    heappush를 하면 최소 힙으로 만드는 것.
    그래서 들어오는 값에 -를 붙여 부호를 반대로 바꿔서 이용하면 최대힙으로 이용할 수 있다 !

 



출처

  • 인프런 : 파이썬 알고리즘 문제 풀이
728x90