문제풀이/기타
[파이썬] [힙] 백준 2696 중앙값 구하기
승무_
2022. 3. 10. 19:45
문제
https://www.acmicpc.net/problem/2696
2696번: 중앙값 구하기
첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 1,000)가 주어진다. 각 테스트 케이스의 첫째 줄에는 수열의 크기 M(1 ≤ M ≤ 9999, M은 홀수)이 주어지고, 그 다음 줄부터 이 수열의 원소가 차례대로 주
www.acmicpc.net
코드
import sys
import heapq
input=sys.stdin.readline
def sol(li):
small=[]
big=[]
middle=li[0]
result=[middle]
for idx,val in enumerate(li[1:],1):
if val > middle:
heapq.heappush(big,val)
else:
heapq.heappush(small,-val)
if idx%2==0:
if len(small) > len(big):
heapq.heappush(big,middle)
middle=-heapq.heappop(small)
elif len(small) < len(big):
heapq.heappush(small,-middle)
middle=heapq.heappop(big)
result.append(middle)
print(len(result))
idx=0
for _ in range(len(result)//10):
print(*result[idx:idx+10])
idx+=10
print(*result[idx:])
t=int(input())
for _ in range(t):
m=int(input())
mok=m//10
na=m%10
li=[]
if mok==0:
li.extend(map(int,input().split()))
else:
for i in range(mok+1):
li.extend(map(int, input().split()))
sol(li)