본문 바로가기

python

[백준] 2696 중앙값 구하기, python

https://www.acmicpc.net/problem/2696
 
 
 

 
 
 
수열의 홀수번째 인덱스에서, 해당인덱스까지의 중앙값을 구하는 문제이다. 
 
 
수를 차례대로 입력받으면서 입력받는 즉시 insort_left를 통해 배열에 넣어준다.
insort_left는 정렬을 유지하면서 배열에 넣을 수 있는 함수로, 이진탐색을 통해 x보다 크거나 같은 수의 첫 번째 위치에 삽입해 준다.
insort_left를 통해 삽입하면 배열의 정렬 상태가 유지되므로 배열의 중앙 인덱스에 있는 값이 현재까지 입력받은 수의 중앙값이 된다.
 
 
 

import sys
from bisect import insort_left
input = sys.stdin.readline

t = int(input())
answer = []

for _ in range(t):
    m = int(input())
    # 입력받은수를 오름차순으로 정렬해서 저장하는 배열
    arr = []

    # 중앙값을 저장하는 배열
    middle = []

    # 10개씩 끊어서 입력받는다.
    for _ in range((m//10)+1):
        for x in map(int, input().split()):
            # 입력을 받을수를 배열이 오름차순 상태를 유지하면서 넣어준다.
            insort_left(arr,x)
            l = len(arr)

            # 홀수번째 인덱스라면, 배열의 중앙값을 넣어준다.
            if l%2==1:
                middle.append(arr[l//2])
    answer.append(middle)

for arr in answer:
    l = len(arr)
    print(l)
    # 10개씩 끊어서 출력한다.
    for i in range((l//10)+1):
        print(' '.join(map(str,arr[i*10:i*10+10])))