📊알고리즘, 문제풀이/📈문제풀이 (PS)

[알고리즘][Python] 백준 11286 절댓값 힙 문제 풀이

Written by Donghak Park

문제 출처 : www.acmicpc.net/problem/11286

 

11286번: 절댓값 힙

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

www.acmicpc.net


문제 해석 : 최소힙을 절댓값을 기준으로 생성하고 이를 구현하는 문제이다.

 

문제 풀이 : 파이썬에서 기본으로 제공하는 heapq를 이용하는데 이때 push, pop에 단순한 숫자말고 [절댓값, 부호]로 삽입하고 출력을 절댓값 * 부호로 함으로 해결할 수 있다.

 

가능한 다른 풀이 : 직접 힙을 구현하여 풀이 할 수 있다.


풀이 코드

import heapq
import sys
input = sys.stdin.readline

N = int(input())
Q = []

for _ in range(N):
    num = int(input())


    if num != 0:
        if num < 0:
            heapq.heappush(Q, [abs(num),-1])
        else:
            heapq.heappush(Q, [abs(num), 1])
    else:
        if Q:
            temp, oper = heapq.heappop(Q)
            print(temp*oper)
        else:
            print(0)

author : donghak park
contact : donghark03@naver.com

## 문제의 저작권은 백준 알고리즘 사이트에 있습니다. 혹시 문제가 되는 부분이 있으면 연락 바랍니다.