백준 11279번 파이썬

Myeongsu·2022년 1월 11일
0

백준

목록 보기
13/15

문제링크: 백준 11279번(최대 힙)
백준 11279번

이 문제는 x가 0이고, 배열이 비어있으면 0출력, 배열이 비어있지 않으면 가장 큰 수 출력,
x가 0이 아닌 자연수면 배열에 x를 추가하는 문제다.

코드

import sys, heapq
input = sys.stdin.readline

hq = []
n = int(input())

for _ in range(n):
    x = int(input())
    if x != 0:
        heapq.heappush(hq, (-x, x))
    else:
        print(heapq.heappop(hq)[1] if hq else 0)

이 문제는 파이썬의 heapq 모듈을 사용해서 우선순위 큐를 생성했다.
heapq의 heappush 메서드는 배열에 값이나 튜플을 넣을 수 있는데 값의 경우 heapq.heappush(hq, 1)과 같이 사용할 수 있다.

튜플의 경우 heappush(hq, (a, b))과 같이 사용할 수 있고, a는 우선순위, b는 값이 된다.
heapq는 배열에 원소가 들어오면 이를 내부적으로 오름차순으로 정렬해준다.

이 문제는 큰 수부터 출력해야 하기 때문에 튜플을 넣어주었고, heapq는 우선순위가 작은 원소부터 정렬하기 때문에 (-x, x) 와 같이 x가 클수록 우선순위가 앞에 작아져 앞에 오기 때문에 이러한 형태의 튜플을 heappush 하면 큰 수부터 출력할 수 있다.

heapq에서 값을 출력할 때는 heappop(hq)을 통해 배열의 가장 앞에 있는 값을 출력 및 제거할 수 있다.
배열에 튜플을 푸시했기 때문에 값에 해당하는 것을 출력하기 위해 heapq.heappop(hq)[1] 과 같이 작성했다.

profile
명수의 개발 공방

0개의 댓글