본문 바로가기
백준 & 프로그래머스

백준.가운데를 말해요.1665.py

by concho 2023. 10. 6.

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

 

1655번: 가운데를 말해요

첫째 줄에는 백준이가 외치는 정수의 개수 N이 주어진다. N은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수이다. 그 다음 N줄에 걸쳐서 백준이가 외치는 정수가 차례대로 주어진다. 정수는 -1

www.acmicpc.net

1. 두개의 리스트를 이용

2. heappush를 이용해 최소값과 최대값(음수)로 하나의 max_value <-> min_value 중간의 순서를 보장하는 리스트를 만듬

3. 중간값을 참조해서 출력

import heapq
import sys
def solution():
    N = int(sys.stdin.readline().rstrip())

    min_heap = []
    max_heap = []
    result = []
    for _ in range(N):
        num = int(sys.stdin.readline().rstrip())
        
        if len(max_heap) == len(min_heap):
            heapq.heappush(max_heap, (-num, num))
        else:
            heapq.heappush(min_heap, num)

        if min_heap and max_heap[0][1] > min_heap[0]:
            max_value = heapq.heappop(max_heap)[1]
            min_value = heapq.heappop(min_heap)
            heapq.heappush(max_heap, (-min_value, min_value))
            heapq.heappush(min_heap, max_value)

        result.append(str(max_heap[0][1]))
    sys.stdout.write('\n'.join(result))
if __name__ == '__main__':
    solution()

댓글