백준 11286: 절댓값 힙 해설- python
프로그래밍/백준

백준 11286: 절댓값 힙 해설- python

728x90
반응형

백준

✏️ 문제

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

 

11286번: 절댓값 힙

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

www.acmicpc.net

 

✏️ 풀이

파이썬의 heapq 모듈을 이용했다. 모듈 사용에 대한 내용은 여기에서

 

파이썬 heapq 모듈 사용법과 응용

✏️ heapq 최소 힙(min heap) 자료구조를 제공한다. 원소는 항상 정렬되어 추가되고 삭제되며 가장 작은 값이 언제나 인덱스 0에 위치하게 된다. import heapq ✏️ 최소힙의 생성 heapq 모듈을 이용함으

duckracoon.tistory.com

 

import heapq
from sys import stdin

N=int(stdin.readline())
heap=[]
for _ in range(N):
  x=int(stdin.readline())
  if x==0:
    if heap:
      print(heapq.heappop(heap)[1])
    else:
      print(0)
  else:
    heapq.heappush(heap, (abs(x),x))

IDEA : y= abs(x) 변환을 하면 최솟값 정렬이 절댓값 정렬로 바뀐다.

힙에 원소를 추가할 때 (-i, i)의 튜플형태로 넣어주면 튜플의 첫 번째 원소를 기준으로 힙을 구성하게 된다.

실제값은 튜플의 두 번째 자리에 저장되어 있으니까 [1]인덱싱을 통해서 접근해주면 된다.

728x90
반응형