[Python/Gold2/2696] 중앙값 구하기

2025. 2. 12. 23:17·BAEKJOON

|    문제

어떤 수열을 읽고, 홀수번째 수를 읽을 때 마다, 지금까지 입력받은 값의 중앙값을 출력하는 프로그램을 작성하시오.

예를 들어, 수열이 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비트 부호있는 정수이다.

|    출력

각 테스트 케이스에 대해 첫째 줄에 출력하는 중앙값의 개수를 출력하고, 둘째 줄에는 홀수 번째 수를 읽을 때 마다 구한 중앙값을 차례대로 공백으로 구분하여 출력한다. 이때, 한 줄에 10개씩 출력해야 한다.

 


정답 코드

import sys, heapq
input = sys.stdin.readline

class Solution:
    def mid_value(self):
        T = int(input())
        for _ in range(T):
            m = int(input()) # 수열의 크기
            arr = []
            for _ in range(m//10 + 1):
                a = list(map(int, input().split()))
                arr.extend(a)
            less = []
            more = []
            res = []
            res.append(arr[0])
            mid = arr[0]
            for idx, v in enumerate(arr[1:], 1):
                if v < mid:
                    heapq.heappush(less, -v)
                else:
                    heapq.heappush(more, v)
                
                if idx % 2 == 0:
                    if len(less) > len(more):
                        heapq.heappush(more, mid)
                        mid = -heapq.heappop(less)
                    elif len(less) < len(more):
                        heapq.heappush(less, -mid)
                        mid = heapq.heappop(more)

                    res.append(mid)
            print(len(res))
            for i in range(0, len(res), 10):
                print(*res[i:min(len(res), i+10)])
if __name__ == "__main__":
    s = Solution()
    s.mid_value()

 

 

|    비고

가운데를 말해요 상위버전. 사실 핵심적인 부분은 같다. mid값 기준 작은 값들은 less배열에, mid값 기준 큰 값들은 more배열에 넣고 값을 비교하여 중앙값을 새로 지정해주면 된다.

'BAEKJOON' 카테고리의 다른 글

[Python][Gold 5][1107] 리모컨  (0) 2025.03.15
[Python][Silver 1][24542] 튜터-튜티 관계의 수  (0) 2025.02.25
[Python/Gold2/1655] 가운데를 말해요  (0) 2025.02.12
[Python/Gold2/1167] 트리의 지름  (0) 2025.02.09
[Python/Gold4/1967] 트리의 지름  (0) 2025.02.09
'BAEKJOON' 카테고리의 다른 글
  • [Python][Gold 5][1107] 리모컨
  • [Python][Silver 1][24542] 튜터-튜티 관계의 수
  • [Python/Gold2/1655] 가운데를 말해요
  • [Python/Gold2/1167] 트리의 지름
콘순이
콘순이
개발 보안 관련 스터디 기록장
  • 콘순이
    SECURITY DEVELOPER
    콘순이
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 분류 전체보기 (71)
      • BAEKJOON (45)
      • ALGORITHM (4)
      • QUALIFICATIONS (0)
      • PYTHON (1)
      • PROGRAMMERS (6)
      • DEVELOP (12)
        • SPRING (4)
        • ERROR (0)
        • CONCEPT (5)
        • AWS (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    비트 조작
    비트 마스킹
    solid
    알고리즘
    문자열
    Python
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
콘순이
[Python/Gold2/2696] 중앙값 구하기
상단으로

티스토리툴바