본문 바로가기

두두의 알고리즘/문제

[힙] 백준 11286번 '절댓값 힙' (Python)

728x90

<문제 링크>

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

 

2887번: 행성 터널

첫째 줄에 행성의 개수 N이 주어진다. (1 ≤ N ≤ 100,000) 다음 N개 줄에는 각 행성의 x, y, z좌표가 주어진다. 좌표는 -109보다 크거나 같고, 109보다 작거나 같은 정수이다. 한 위치에 행성이 두 개 이

www.acmicpc.net

 


<문제 풀이>

1. 최솟값이라는 우선순위대로 출력하므로 힙 사용

 

<코드>

#내코드
#17분/40분

import heapq
import sys

input = sys.stdin.readline
result = []
queue = []

n = int(input())
for i in range(n):
    x = int(input())
    if x != 0:
        heapq.heappush(queue,[abs(x),x//abs(x)])
    else:
        if queue==[]:
            print(0)
        else:
            result = heapq.heappop(queue)
            print(result[0]*result[1])
#패스트캠퍼스 답
import sys
input = sys.stdin.readline
import heapq

heap = []
n = int(input())
for i in range(n):
	x = int(input())
    if x==0:
    	if len(heap)==0:
        	print(0)
        else:
        	absolute, original = heapq.heappop(heap)
            print(original)
    else:
    	heapq.heappush(heap,(abs(x),x))