https://www.acmicpc.net/problem/11286
11286번: 절댓값 힙
첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0
www.acmicpc.net
min-heap을 이용해 해결하면 된다. 절댓값이 작은 순서대로 정렬 되어야 하고 같은 값이 두개 이상이라면 이 중에서 원래 값이 더 작은(= 음수) 값을 먼저 출력해야 하므로 heapq의 min-heap에 (절댓값, 원래값)의 튜플 형태로 원소를 넣어 주면 퓨플의 순서대로 정렬을 할 수 있다.
import sys
import heapq
input = sys.stdin.readline
N = int(input())
pq = []
for _ in range(N):
x = int(input())
if x == 0:
print(heapq.heappop(pq)[1] if pq else 0)
else:
heapq.heappush(pq, (abs(x), x))
heapq를 import하여 문제를 해결했다. heapq의 설명은 다음 글 참조.
2022.04.22 - [ALGORITHM/Data Structure] - [Python] min-hip을 이용한 Priority Queue
[Python] min-hip을 이용한 Priority Queue
- 최소 힙(min-heap)의 구조 - 삽입/삭제: O(logN) import heapq로 사용 가능 push: heapq.heappush(hq, item) pop: heapq.heappop(hq) import heapq pq = [] heapq.heappush(pq, 6) heapq.heappush(pq, 12) heap..
notbusyperson.tistory.com
'ALGORITHM > BOJ' 카테고리의 다른 글
16946-벽 부수고 이동하기 4 (0) | 2022.04.26 |
---|---|
2178-미로탐색 (0) | 2022.04.26 |
1058-친구 (0) | 2022.04.25 |
11724-연결 요소의 개수 (0) | 2022.04.25 |
1302-베스트셀러 (0) | 2022.04.22 |