문제풀이/기타

[파이썬] [힙] 백준 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)