-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path11286.py
More file actions
85 lines (66 loc) · 3.36 KB
/
Copy path11286.py
File metadata and controls
85 lines (66 loc) · 3.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# 절댓값 힙
# 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율
# 1 초 (추가 시간 없음) (하단 참고) 256 MB 67478 38461 30240 57.082%
# 문제
# 절댓값 힙은 다음과 같은 연산을 지원하는 자료구조이다.
# 배열에 정수 x (x ≠ 0)를 넣는다.
# 배열에서 절댓값이 가장 작은 값을 출력하고, 그 값을 배열에서 제거한다.
# 절댓값이 가장 작은 값이 여러개일 때는, 가장 작은 수를 출력하고, 그 값을 배열에서 제거한다.
# 프로그램은 처음에 비어있는 배열에서 시작하게 된다.
# 입력
# 첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다.
# 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다.
# 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고,
# x가 0이라면 배열에서 절댓값이 가장 작은 값을 출력하고 그 값을 배열에서 제거하는 경우이다.
# 입력되는 정수는 -231보다 크고, 231보다 작다.
# 출력
# 입력에서 0이 주어진 회수만큼 답을 출력한다.
# 만약 배열이 비어 있는 경우인데 절댓값이 가장 작은 값을 출력하라고 한 경우에는 0을 출력하면 된다.
# 슈도코드
# n 질의 갯수
# 우선순위 큐 선언
# - 이때 절댓값 기준으로 정렬해야함!
# - 절댓값이 같으면 음수를 우선으로 정렬
# for N
# 요청이 0 => 큐가 비어있으면 0, 비어 있지 않으면 큐의 front 데이터 출력(get())
# 요청이 1 => 새 데이터를 우선순위 큐에 더하기 (put())
# Solution Code
from queue import PriorityQueue
import sys
print = sys.stdout.write
input = sys.stdin.readline
n = int(input())
myQueue = PriorityQueue()
for i in range(n):
request = int(input())
if request == 0:
if myQueue.empty():
print("0\n")
else:
temp = myQueue.get()
print(str((temp[1]))+'\n')
else:
myQueue.put((abs(request), request))
# 해설
# 1. PriorityQueue
# 우선순위 큐를 구현하기 위한 클래스
# 개념) 우선순위 큐
# 요소들이 우선순위에 따라 정렬되어 저장되고, 가장 높은 우선순위인 요소가 먼저 나온다.
# 우선순위 큐의 메소드
# 1) put(item): item을 큐에 추가
# ex. myQueue.put((abs(request), request))
# => (절댓값, 원래값)을 튜플로 묶어서 큐에 추가
# 우선순위 큐는 첫 번째 요소를 우선순위로 잡아서 정렬한다.
# 예시로 request = -3이라면 (3, -3)으로 큐에 추가된다.
# 만일 request = 3이라면 (3, 3)으로 큐에 추가된다.
# Q. 음수를 먼저 나오게 하도록 어떻게 설정한거지?
# A. (abs(request), request) 형태 데이터에서 우선순위를 따진것!
# 1순위로 절댓값을 비교한 후, 같으면 2순위로 원래 값을 비교한다.
# 참고로 우선순위 큐는 기본적으로 오름차순 정렬인데
# request 값이 음수이면 값이 더 작기 때문에 우선순위가 된다!
# 2) get(): 큐에서 우선순위가 가장 높은 요소를 제거하고 반환
# 3) empty(): 큐가 비어있는지 확인, 큐가 비어있으면 True, 아니면 False
# 4) qsize(): 큐의 크기 반환
# 2. sys 모듈
# 파이썬 인터프리터와 상호작용하는 기능들을 제공
# sys.stdout.write()는 print()보다 빠르게 동작