Notice
Recent Posts
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
관리 메뉴

교대최소제곱법

[백준 파이썬 1655번 가운데를 말해요] heapq 사용법 본문

코딩테스트

[백준 파이썬 1655번 가운데를 말해요] heapq 사용법

옐라크레 2023. 10. 17. 18:53

1. heapq의 힙 푸쉬는 가장 작은 숫자가 가장 앞에 존재한다.

-> 리스트명[0]은 가장 작은 숫자

-> 그래서 pop을 안하고 [0]으로 가장 작은 숫자를 엿볼 수 있다.

 

2. heappop은 기본적으로 가장 작은 원소를 출력한다. -> 최소힙

from heapq import heappop, heappush

N = int(input())
min_heap = []
max_heap = []
ans_ls = []
for _ in range(N):
    num = int(input())
    if len(min_heap) == len(max_heap):
        heappush(min_heap, (-num, num))
    else:
        heappush(max_heap, (num, num))

    if max_heap and min_heap[0][1] > max_heap[0][0]:
        temp_min = heappop(min_heap)[1]
        temp_max = heappop(max_heap)[1]
        heappush(min_heap, (-temp_max, temp_max))
        heappush(max_heap, (temp_min, temp_min))

    ans_ls.append(min_heap[0][1])

print(ans_ls)

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

 

1655번: 가운데를 말해요

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

www.acmicpc.net