본문 바로가기
Problem Solving/BOJ

[BOJ][Python]11286번 풀이

by NoiB 2022. 7. 7.
반응형

https://www.acmicpc.net/problem/11286

 

11286번: 절댓값 힙

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

www.acmicpc.net

import heapq
import sys
ssr = sys.stdin.readline

n = int(ssr())
h=[]
for _ in range(n):
    o = int(ssr())
    if o == 0:
        if len(h) != 0:
            print(heapq.heappop(h)[1])
        else:
            print(0)
    else:
        heapq.heappush(h, (abs(o), o))

지난 번에 최대 힙을 풀 때는 모조리 다 -를 씌워서 저장한 다음 출력할 때 다시 -를 붙여서 나오는 방식으로 구현을 했었는데요. 그 이후에 찾아보니 heapq의 heappush는 저장할 때 맨 앞의 원소를 기준으로 정렬하기 때문에 튜플로 묶은 다음 정리를 위한 값을, 앞에 뒤에는 원래 값을 배치해서 저장하고 나중에 heappop을 할 때 뒤 원소를 출력하도록만 해주면 문제없다는 사실을 알았습니다. 자료양이 엄청나게 많아진다면 메모리 관점에서 비효율적일 수는 있겠으나 이런 문제를 푸는데는 좋은 풀이가 아닐까 생각이 드네요.

반응형

'Problem Solving > BOJ' 카테고리의 다른 글

[BOJ][Python]11403번 풀이  (0) 2022.07.08
[BOJ][Python]2578번 풀이  (0) 2022.07.07
[BOJ][Python]6064번 풀이  (0) 2022.07.06
[BOJ][Python]5525번 풀이  (0) 2022.07.05