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()
'백준 & 프로그래머스' 카테고리의 다른 글
프로그래머스.붕대감기.java (0) | 2023.11.28 |
---|---|
프로그래머스.주차 요금 계산.py (1) | 2023.11.28 |
백준.다각형의 면적.2103.java (0) | 2023.09.26 |
백준.DFS와 BFS.1260.py (0) | 2023.09.23 |
백준.듣보잡.1764.py (0) | 2023.09.21 |
댓글