-
https://www.acmicpc.net/problem/11279
11279번: 최대 힙
첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가
www.acmicpc.net
최대 힙을 이용하여 값을 넣고 최대 값을 뺄 수 있게 만드는 문제다.
파이썬의 기본 라이브러리인 heapq를 이용하여 풀었다.
정답코드
from heapq import heappush, heappop import sys li = [] for i in range(int(input())): inp = int(sys.stdin.readline()) if inp != 0: heappush(li, (-inp, inp)) elif inp == 0: if len(li) >= 1: print(heappop(li)[1]) else: print(0)8번 라인에서 heappush(li, (-inp, inp))에서 튜플형식으로 (-inp, inp) 값을 넣는다. 그 이유는 heapq 라이브러리는 기본적으로 최소 힙을 사용한다.
따라서 (-inp, inp) 를 힙에 넣으면 -inp를 기준으로 최소 힙을 구성하게 되므로 그 상태에서 inp 값을 보면 최대 힙이다. 그 다음 최대 값을 뽑아낼 때는 heappop 한 것의 1번 인덱스 값을 이용하면 된다.
'알고리즘' 카테고리의 다른 글
[프로그래머스] 주식가격 (0) 2021.05.17 [프로그래머스] 다리를 지나는 트럭 (0) 2021.05.09 [프로그래머스] 신규 아이디 추천 (0) 2021.05.08 [백준] 1182 부분수열의 합 (1) 2021.05.06 댓글
