본문 바로가기
백준 알고리즘

파이썬) 백준 알고리즘 | 1655번 : 가운데를 말해요

by 코딩새내기_ 2022. 3. 29.

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

 

1655번: 가운데를 말해요

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

www.acmicpc.net

백준 1655 '가운데를 말해요' 문제입니다.

우선순위 큐를 이용하였는데 heap1, heap2를 만들고 heap1은 최대힙, heap2는 최소힙으로 구현합니다.

그리고 for문을 돌려서 input 배열의 짝수번 째 index에서는 마이너스를 취해서 heap1에 넣고

홀수번 째 index에서는 heap2에 넣습니다.

그리고 매번 -heap1[0]과 heap2[0]을 비교해서 -heap1[0]가 더 크다면 heap1, heap2에서 각각 pop하여

다른 곳에 넣어줍니다.

import sys
import heapq
input = sys.stdin.readline
n = int(input())
nums = []
for i in range(n):
    nums.append(int(input()))
heap1 = []
heap2 = []
for i in range(n):
    if i % 2 == 0:
        heapq.heappush(heap1, -nums[i])
    else:
        heapq.heappush(heap2, nums[i])
    if i >= 1:
        a = -heap1[0]
        b = heap2[0]
        if a > b:
            x = heapq.heappop(heap2)
            y = heapq.heappop(heap1)
            heapq.heappush(heap1, -x)
            heapq.heappush(heap2, -y)
    print(-heap1[0])

댓글