๋ฌธ์
https://school.programmers.co.kr/learn/courses/30/lessons/42628
ํ์ด
# ํ๋ก๊ทธ๋๋จธ์ค 3๋จ๊ณ - ์ด์ค ์ฐ์ ์์ ํ
import heapq
def solution(operations):
heap = []
max_heap = []
for o in operations:
current = o.split()
if current[0] == 'I':
num = int(current[1])
heapq.heappush(heap, num) # ์ต์ ํ
heapq.heappush(max_heap, (num*-1, num)) # ์ต๋ ํ
else:
if len(heap) == 0:
pass
elif current[1] == '1':
max_value = heapq.heappop(max_heap)[1]
heap.remove(max_value)
elif current[1] == '-1':
min_value = heapq.heappop(heap)
max_heap.remove((min_value*-1, min_value))
if heap:
return [heapq.heappop(max_heap)[1], heapq.heappop(heap)]
else:
return [0,0]
print(solution(["I 16", "I -5643", "D -1", "D 1", "D 1", "I 123", "D -1"]))
์ด์ค ์ฐ์ ์์ ํ ๋ฌธ์ ์ด๋ค. ์ฐ์ ์์ ํ๋ ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ํตํด ๊ตฌํ์ด ๊ฐ๋ฅํ๋ค.
๋ด๊ฐ ์ด ๋ฐฉ๋ฒ์ ๊ธฐ๋ณธ์ ์ผ๋ก ํ ์๋ฃ๊ตฌ์กฐ๋ก ๋ง๋๋ ์ฐ์ ์์ ํ๋ ์ต์ ํ์ด๋ฏ๋ก ์ต๋ ํ์ ๋ฐ๋ก ๊ตฌํ ํ๊ณ
์ต์๊ฐ์ ๋นผ์ผํ๋ฉด ์ต์ํ์์ pop์ ํด์ฃผ๊ณ ์ต๋ํ์์ remove๋ฅผ ํด์ค๋ค.
์ต๋๊ฐ์ ๋นผ์ผํ๋ฉด ์ต์ํ์์ remove๋ฅผ ํด์ฃผ๊ณ ์ต๋ํ์์ pop์ ํด์ค๋ค.
๋ฌธ์ ๋ฅผ ํ๋ค๊ฐ ์ด๋ ๊ฒ ๊ตฌํํ์ง ์๊ณ heapq.nsmallest / heaqp.nlargest ๋ผ๋ ๊ฒ์ด ์๋ค๋ ๊ฒ์ ์์๋ค.
์ด๊ฑธ ์ฌ์ฉํ๋ฉด ๊ตณ์ด ์ต๋/์ต์ ํ์ ๊ตฌํํ์ง ์์๋ ๋ฌธ์ ํด๊ฒฐ์ด ๊ฐ๋ฅํ๋ค.
heap = heapq.nlargest(len(heap), heap)[1:]
heapq.heapify(heap)