[Baekjoon/๐ฅSilverโ ก] 11279: ์ต๋ ํ
Intro
Algoritm๐ฉโ๐ป: heap ์ง์ ๊ตฌํ
#21.01.19
#11279: ์ต๋ ํ
import sys
N = int(input())
heap = [0]
def push(x):
heap.append(x)
idx = len(heap)-1
while 1:
if idx == 1 or x < heap[idx//2]:
break
else:
heap[idx] = heap[idx//2]
heap[idx//2] = x
idx //= 2
def pop():
print(heap[1])
lst = heap[-1]
heap[1] = lst
del(heap[-1])
idx = 1
while 1:
if len(heap) < idx*2 + 1:
break
elif len(heap) >= idx*2 + 2:
if heap[idx*2] > heap[idx*2 + 1]:
max = idx*2
else:
max = idx*2 + 1
if lst < heap[max]:
heap[idx] = heap[max]
heap[max] = lst
idx = max
else:
break
elif lst < heap[idx*2 ]:
heap[idx] = heap[idx*2]
heap[idx*2] = lst
idx = idx * 2
else:
break
for i in range(N):
x = int(sys.stdin.readline())
if x == 0:
if len(heap) == 1:
print(0)
else:
pop()
else:
push(x)
๐ฉ ํ์ ์ง์ ๊ตฌํํด๋ณด์๋ค. ์ค๋ต์ ์๋์์ผ๋ ๋ง์ ์๊ฐ์ ํ์๋ก ํ๊ณ , ์ฝ๋๋ฅผ ์ฝ๊ฐ ์์ ํ ๊ฒฝ์ฐ, ์๊ฐ์ด๊ณผ๊ฐ ๋์๋คใ ใ
Algoritm๐ฉโ๐ป: heapq
-
heapq ๋ชจ๋์ ์ผ๋ฐ ๋ฆฌ์คํธ๋ฅผ ๋ง์น ์ต์ ํ์ฒ๋ผ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ค.
-
์ฐ๋ฆฌ๊ฐ ๊ตฌํํด์ผ ํ ๊ฒ์ ์ต๋ ํ์ด๋ฏ๋ก ๋ค์ด๊ฐ๋ ๊ฐ์ -1์ ๊ณฑํจ์ผ๋ก์จ ๊ฐ์ฅ ํฐ ๊ฐ์ด ๊ฐ์ฅ ์์ ๊ฐ์ด ๋๋๋ก ๋ณ๊ฒฝํ๋ฉด ๋๋ค.
#21.01.19
#11279: ์ต๋ ํ
import sys
import heapq
N = int(input())
heap = []
for _ in range(N):
x = int(sys.stdin.readline())
if x == 0:
try:
print(-1 * heapq.heappop(heap))
except:
print(0)
else:
heapq.heappush(heap, -x)
- heapq๋ ์ต์ ํ์ ์ง์ํ๋ฏ๋ก ๋ค์ด๊ฐ๋ ๊ฐ์ -1์ ๊ณฑํด ์์ํํ๋ก ๊ฐ์ ์ฝ์
ํ๋ค.
- ์ต๋ ๊ฐ์ ์ต์ ๊ฐ์ผ๋ก ๋ณ๊ฒฝํ๋ค.
- ์ถ๋ ฅํ ๋๋ popํ ๊ฐ์ -1์ ๊ณฑํด ์๋ ๊ฐ์ ์ถ๋ ฅํ๋ค.
์ฐธ๊ณ ๐
์ด๋ฒ ํฌ์คํ ์ ์ฌ๊ธฐ์!
๋!! ~(หโพห~)
๋๊ธ๋จ๊ธฐ๊ธฐ