알고리즘

백준[1655번] 가운데를 말해요

moongi 2023. 9. 19. 13:24
반응형
#include <iostream>
#include <queue>
using namespace std;

int main(int argc, char const *argv[])
{
    ios::sync_with_stdio(false);
    cin.tie(NULL);

    int n;
    cin >> n;

    priority_queue<int> maxHeap;
    priority_queue<int, vector<int>, greater<>> minHeap;

    int x;
    for (int i = 0; i < n; i++)
    {
        cin >> x;

        if (maxHeap.size() <= minHeap.size())
        {
            maxHeap.push(x);

            if (!minHeap.empty() && maxHeap.top() > minHeap.top())
            {
                int a1 = minHeap.top();
                int a2 = maxHeap.top();
                minHeap.pop();
                maxHeap.pop();
                minHeap.push(a2);
                maxHeap.push(a1);
            }
            cout << maxHeap.top() << '\n';
        }
        else
        {
            minHeap.push(x);

            if (!minHeap.empty() && maxHeap.top() > minHeap.top())
            {
                int a1 = minHeap.top();
                int a2 = maxHeap.top();
                minHeap.pop();
                maxHeap.pop();
                minHeap.push(a2);
                maxHeap.push(a1);
            }
            cout << maxHeap.top() << '\n';
        }
    }

    return 0;
}

참고: https://www.crocus.co.kr/625

1. maxheap, minheap 생성

2. maxHeap.top()이 중간값이 되도록 설정

규칙

1. maxheap.size() >= minHeap.size() : 같거나 하나 더 크다.

2. maxheap.top() <= minHeap.top(): 만약 maxHeap.top()이 minHeap.top()보다 크다면 서로 swap한다.

 

 

 

반응형

'알고리즘' 카테고리의 다른 글

백준[15663번] N과 M(9)  (2) 2023.10.31
백준[2133번] 타일 채우기  (0) 2023.10.30
백준[3197번] 백조와 호수  (0) 2023.09.19
백준 14889번 스타트와 링크  (0) 2023.09.07
이진 탐색(Binary_search) using python  (0) 2022.12.31