Gemstone's Devlog

[백준] 2696번: 중앙값 구하기 본문

Data Structure & Algorithms

[백준] 2696번: 중앙값 구하기

Gemstone 2021. 8. 18. 23:49

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

 

2696번: 중앙값 구하기

첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 1,000)가 주어진다. 각 테스트 케이스의 첫째 줄에는 수열의 크기 M(1 ≤ M ≤ 9999, M은 홀수)이 주어지고, 그 다음 줄부터 이 수열의 원소가 차례대로 주

www.acmicpc.net

파이썬에서는 최대힙과 최소힙을 함수로 만들어야해서 너무 귀찮았다.

그래서 이번에는 c++로 코드를 짜보았다.

#include <iostream>
#include <queue>
#include <vector>
using namespace std;

int main() {
    ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);

    int M, x, TC, medianCnt;
    cin >> TC;
    while(TC--) {
        priority_queue<int> maxHeap;
        priority_queue<int, vector<int>, greater<int>> minHeap;

        cin >> M; // 문제조건 M = 홀수
        cout << M / 2 + 1 << '\n';

        medianCnt = 0; // 한 줄에 10개씩 출력하기 위함
        for (int i = 1; i <= M; i++) {
            cin >> x;
            if (maxHeap.size() == minHeap.size())
                maxHeap.push(x);
            else
                minHeap.push(x);
            if (!minHeap.empty() && !maxHeap.empty() && minHeap.top() < maxHeap.top()) {
                int a = maxHeap.top(); maxHeap.pop();
                int b = minHeap.top(); minHeap.pop();

                minHeap.push(a); maxHeap.push(b); // 스왑
            }

            // 홀수 번째 수인 경우
            if (i % 2) {
                cout << maxHeap.top() << ' ';
                medianCnt++;
                // 10개씩 1줄단위 처리
                if (medianCnt % 10 == 0)
                    cout << '\n';
            }
        }
        cout << '\n';
    }
}

https://zoosso.tistory.com/503

 

[BOJ] 백준 2696 중앙값 구하기

출처: https://www.acmicpc.net/problem/2696 [그래프] 힙(Heap) 자료구조란? 힙(Heap) 자료구조란? Heap - 최대값 또는 최소값을 빠르게 구하기 위한 자료구조 - 완전 이진 트리를 기본으로 한 자료구조 - 마지..

zoosso.tistory.com

 

'Data Structure & Algorithms' 카테고리의 다른 글

[백준] 3055번: 탈출  (0) 2021.08.23
[백준] 1715번: 카드 정렬하기  (0) 2021.08.19
[백준] 17298번: 오큰수  (0) 2021.08.17
[백준] 1406번: 에디터  (0) 2021.08.17
[백준] 2346번: 풍선 터뜨리기  (0) 2021.08.16