문제
어떤 수열을 읽고, 홀수번째 수를 읽을 때 마다, 지금까지 입력받은 값의 중앙값을 출력하는 프로그램을 작성하시오.
예를 들어, 수열이 1,5,4,3,2 이면, 홀수번째 수는 1번째 수, 3번째 수, 5번째 수이고, 1번째 수를 읽었을 때 중앙값은 1, 3번째 수를 읽었을 때는 4, 5번째 수를 읽었을 때는 3이다.
입력
첫째 줄에 테스트 케이스의 개수 T(1<=T<=1,000)가 주어진다. 각 테스트 케이스의 첫째 줄에는 수열의 크기 M(1<=M<=9999, M=홀수)이 주어지고, 그 다음 줄부터 이 수열의 원소가 차례대로 주어진다. 원소는 한 줄에 10개씩 나누어져있고, 32비트 부호있는 정수이다. (대부분의 언어에서 int)
출력
예제
입력1
3
9
1 2 3 4 5 6 7 8 9
9
9 8 7 6 5 4 3 2 1
23
23 41 13 22 -3 24 -31 -11 -8 -7
3 5 103 211 -311 -45 -67 -73 -81 -99
-33 24 56
출력1
5
1 2 3 4 5
5
9 8 7 6 5
12
23 23 22 22 13 3 5 5 3 -3
-7 -3
코드
from sys import stdin
from typing import List
class Solution:
def centerValue(self, M: int, data: List[int]):
answers = []
for right in range(1, M + 1, 2):
suffix = data[:right]
suffix.sort()
answers.append(suffix[right // 2])
if len(answers) <= 10:
print(len(answers))
print(*answers)
else:
print(len(answers))
linedAnswers = []
tmp = []
for answer in answers:
if len(tmp) == 10:
linedAnswers.append(tmp)
tmp = []
tmp.append(answer)
linedAnswers.append(tmp)
for linedAnswer in linedAnswers:
print(*linedAnswer)
return
for _ in range(int(stdin.readline())):
M = int(stdin.readline())
if M <= 10:
Solution().centerValue(M, list(map(int, stdin.readline().split())))
else:
data = []
a = M // 10
b = M % 10
if b == 0:
for i in range(a):
data.extend(list(map(int, stdin.readline().split())))
Solution().centerValue(M, data)
else:
for i in range(a+1):
data.extend(map(int, stdin.readline().split()))
Solution().centerValue(M, data)