728x90

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

 

11286번: 절댓값 힙

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

www.acmicpc.net

 

 

# 조건

  • 배열에 정수 x를 넣는다.
  • 배열에서 절댓값이 가장 작은 값을 출력하고, 그 값을 배열에서 제거
  • 절댓값이 가장 작은 값이 여러 개일 때는, 가장 작은 수를 출력하고, 배열에서 제거
  • 입력에서 0이 주어진 회수만큼 답을 출력한다. 만약 배열이 비어있는 경우에 0이 주어진다면 0을 출력

 

 

 

# 접근 방법

  • heapq 모듈을 사용해준다.
  • abs를 이용하여 값을 넣어줄껀데 ( abs(x), x) 와 같이 튜플로 묶어서 넣어준다.

 

from heapq import heappush, heappop
import sys
input = sys.stdin.readline



arr = []
n = int(input())
for _ in range(n):
    a = int(input())
    if not a == 0:
        heappush(arr, (abs(a), a))
    elif a == 0 and arr:
        i, j = heappop(arr)
        print(j)
    elif a == 0 and not arr:
        print(0)
728x90