상상쓰

[백준] 가운데를 말해요 본문

Coding Test

[백준] 가운데를 말해요

상상쓰 2021. 7. 15. 11:25

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

 

1655번: 가운데를 말해요

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

www.acmicpc.net

 

heapq 를 이용하여 bigger 과 smaller 인 queue 를 만들어서 기준이 되는 중간값(bigger[0]) 을 기준으로 크면 bigger, 작으면 smaller 에 추가해준다.

 

bigger[0] 은 값이 추가될 때, 그 값이 smaller 의 어떤 원소보다 작을 수 있으므로 smaller[0] 과 비교하여 작으면 교체해준다.

 

import sys, heapq

N = int(sys.stdin.readline())
bigger = []
smaller = []
answer = []

for i in range(N):
    heapq.heappush(bigger, int(sys.stdin.readline()))
    
    if len(bigger) - len(smaller) == 3:
        heapq.heappush(smaller, -heapq.heappop(bigger))
    else:
        if smaller:
            M, m = heapq.heappop(bigger), -heapq.heappop(smaller)
            heapq.heappush(bigger, max(M, m))
            heapq.heappush(smaller, -min(M, m))
    
    answer.append(bigger[0])

for i in answer:
    print(i)

'Coding Test' 카테고리의 다른 글

[프로그래머스] 가장 먼 노드  (0) 2021.07.16
[프로그래머스] 표 편집  (0) 2021.07.16
[백준] 컵홀더  (0) 2021.07.14
[백준] 8진수 2진수  (0) 2021.07.13
[프로그래머스] [1차] 추석 트래픽  (0) 2021.07.13
Comments