본문 바로가기
Algorithm/Data Structures

[파이썬] 백준 11279,11286 : 최대 힙, 최소힙 (실버2)

by 베짱이28호 2023. 6. 4.

[파이썬] 백준 11279,11286 : 최대 힙, 최소힙 (실버2)

 

 

11279번: 최대 힙

첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0

www.acmicpc.net

 

 

1927번: 최소 힙

첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0

www.acmicpc.net


문제


풀이

0.방향성 생각

최대힙

입력값이 0 이상의 정수인 경우의 최대 힙이므로 입력값을 음수로 넣고 정렬한다.

1 2 3을 넣으면 -3 -2 -1로 정렬이되고 1이 들어올 경우 -3 -2 -1 -1이 되어 가장 작은 값인 -3을 내보낸다.

출력된 값에 다시 -1을 곱해서 출력한다.

 

최소힙

최소힙은 그냥 heapq 사용해주면 된다.

1. 전체 코드

최대힙

import heapq
import sys
input = sys.stdin.readline

t = int(input())
max_heap = []
for i in range(t):
    n = int(input())
    if n>0 :
        heapq.heappush(max_heap,-n)
    elif n==0 :
        if not max_heap :
            print(0)
        else :
            x = heapq.heappop(max_heap)
            print(-x)

최소힙

import heapq
import sys
input = sys.stdin.readline

t = int(input())
min_heap = []
for i in range(t):
    n = int(input())
    if n>0 :
        heapq.heappush(min_heap,n)
    elif n==0 :
        if not min_heap :
            print(0)
        else :
            x = heapq.heappop(min_heap)
            print(x)

난이도 보다는 개념을 알고있는지 체크하는 문제

댓글