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
'Coding Test > BaekJoon_Python' 카테고리의 다른 글
백준 1867 <돌멩이 제거> Python (0) | 2024.09.11 |
---|---|
백준 1520 <내리막 길> Python (0) | 2024.09.09 |
백준 2143 <두 배열의 합> Python (0) | 2024.09.08 |
백준 3673 <나눌 수 있는 부분 수열> Python (3) | 2024.09.07 |
백준 2607 <비슷한 단어> Python (1) | 2024.01.27 |