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