Week 01 ~ 04 : 알고리즘 문제 풀이
파이썬 백준 1655 가운데를 말해요
정글러
2021. 11. 15. 23:50
import sys
input = sys.stdin.readline
import heapq
under = []
over = []
n = int(input())
for i in range(n) :
x = int(input())
if len(under) == len(over) :
heapq.heappush(under, -x)
else :
heapq.heappush(over, x)
if over != [] and -under[0] > over[0] :
a = -heapq.heappop(under)
b = heapq.heappop(over)
heapq.heappush(under, -b)
heapq.heappush(over, a)
print(-under[0])
|
heap의 구현은 이전 문제에서 해봤으니 생략하고 heapq를 import했다.
힙을 2개나 쓰는데 이걸 하나하나 구현하긴 좀...
최소 힙 over, 그리고 최소 힙 under에 부호를 뒤집어 넣어 최대 힙으로 이용하여 2개의 힙을 쓴다.
under와 over에 원소를 번갈아 넣되 under[0]가 over[0]보다 크다면 둘의 위치를 바꿔준다.
이를 반복하면 under에는 중간값 아래, over에는 중간값 위만 저장되며 under[0]가 중간값이 된다.