[백준]11286 - 절댓값 힙
고려사항
- 일반 최소힙 구현해놓고 heappush의 요소로 리스트 넣을 수 있는지 확인해봄.
공식 문서에 튜플도 넣을 수 있다고 해서(대신 그 요소의 첫 번째 값 기준으로 힙이 구성됨) 리스트도 되겠지~ 하고 써봤더니 됐음.
2. push할 때 첫 번째 인자는 abs()를 사용하여 절댓값으로 힙을 구성하도록 하고, 리스트 두 번째 인자로 양수/음수 표시 해줌.
pop할 때는 리스트의 첫 번째 인자와 두 번째 인자를 곱하여 원래의 값이 출력되도록 함.
코드
#S1_11286_절댓값 힙
import sys
from heapq import heappush, heappop
def absHeap(n,num):
h=[]
for x in num:
if x==0:
if h:
res=heappop(h)
print(res[0]*res[1])
else:
print(0)
else:
if x<0:
heappush(h,[abs(x),-1])
else:
heappush(h,[x,1])
input=sys.stdin.read
data=input().split()
n=int(data[0])
num=list(map(int,data[1:]))
absHeap(n,num)
Leave a comment