백준 문제풀이

백준 1655 - 가운데를 말해요 [Python]

Vermeil 2021. 3. 22. 11:40

www.acmicpc.net/problem/1655

 

1655번: 가운데를 말해요

첫째 줄에는 수빈이가 외치는 정수의 개수 N이 주어진다. N은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수이다. 그 다음 N줄에 걸쳐서 수빈이가 외치는 정수가 차례대로 주어진다. 정수는 -1

www.acmicpc.net

 

중앙값을 기준으로 우선순위 큐 두 개를 만들어주고 풀었다.

 

코드 더러워지는거 싫어서

hpp = heapq.heappop

hps = heapq.heappush

라고 미리 써두고 풀었다

 

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
import heapq, sys
input = sys.stdin.readline
hpp = heapq.heappop
hps = heapq.heappush
= []
= []
= int(input())
for i in range(n):
    t = int(input())
    if i < 2:
        hps(r, t)
        now = r[0]
        print(r[0])
        continue
    if t <= now:
        hps(l, -t)
    else:
        hps(r, t)
 
    if len(l) == len(r):
        lpop = hpp(l)
        hps(r, -lpop)
    if len(l) + 3 == len(r):
        rpop = hpp(r)
        hps(l, -rpop)
    now = r[0]
    print(r[0])
cs