Week 01 ~ 04 : 알고리즘 문제 풀이

파이썬 백준 2696 중앙값 구하기

정글러 2021. 11. 17. 19:45
import sys
input = sys.stdin.readline
import heapq
testcase = int(input())
for j in range(testcase) :
    n = int(input())
    l = []
    if n % 10 == 0 :
        for i in range(n // 10) :
            l = l + list(map(int, input().split()))
    else :
        for i in range(n // 10 + 1) :
            l = l + list(map(int, input().split()))
    under = []
    over = []
    ans = []
    for i in range(n) :
        x = l[i]
        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)
        if len(under) > len(over) :
            ans.append(-under[0])
    s = len(ans)
    print(s)
    for i in range(s // 10) :
        for k in range(9) :
            print(ans[10 * i + k], end = ' ')
        print(ans[10 * i + 9])
    for k in range(s % 10 - 1) :
        print(ans[s - s % 10 + k], end = ' ')
    print(ans[s-1])

1655 가운데를 말해요의 코드(https://uneducatedjungler.tistory.com/41)를 거의 그대로 쓰되

중앙값을 출력하는 타이밍이 다르고 출력 포맷이 까다로우니 잘 지켜줘야 한다.

문제를 풀어볼수록 기존에 풀어본 문제와 상황은 다르지만 위상적으로 같은(?) 문제가 등장하는 것 같다.