Coding Test/BaekJoon_Python

백준 2696 <중앙값 구하기> Python

JunOnJuly 2024. 9. 8. 14:31
728x90

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


입력 가운데 여러번 중앙값을 구하는 문제는 일반적으로 최대힙과 최소힙을 연결해 푸는 경우가 대부분입니다. 하지만 단순히 정렬이 여러 번 이루어지기 때문에 정렬의 속도가 문제라면 이분탐색을 이용한 정렬을 통해 해결할 수 있습니다. 이런 방식은 매번 모든 데이터를 정렬하지 않기 때문에 보다 빠르게 문제를 해결할 수 있습니다.

 

bisect.insort 함수를 사용해 새로운 데이터가 추가될 때 마다 해당 데이터가 들어갈 수 있는 위치를 이분탐색으로 찾아 삽입했습니다.


import sys
from bisect import insort

input = sys.stdin.readline


def solution(M, data_list):
    # 결과 리스트
    result = []
    # 하나씩 데이터를 넣을 리스트
    input_list = []
    # 하나씩 데이터를 넣기
    for i in range(M):
        insort(input_list, data_list[i])
        # 홀수면
        if not i%2:
            # 중앙값 넣기
            result.append(input_list[i//2])

    return result


# 입력
T = int(input().strip())
for _ in range(T):
    M = int(input().strip())
    data_list = []
    for __ in range(M//10 + 1):
        data_list += list(map(int, input().strip().split()))
   
    result = solution(M, data_list)
    print(len(result))
    for i in range(0, len(result), 10):
        print(*result[i:i+10])

 

728x90