문제
입력
출력
우선순위 큐를 두개 이용하여 문제를 해결했다.
처음에 숫자를 하나 받고 그것을 중앙값으로 저장한다.
다음부터는 다음 규칙을 따른다.
출력시에는 현재 주어진 총 개수에 따라 중앙값을 적절하게 조정한다.
정답코드
#include <iostream>
#include <algorithm>
#include <queue>
#include <vector>
using namespace std;
int main() {
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int key, n;
cin >> n;
priority_queue<int>left;
priority_queue<int,vector<int>, greater<int>>right;
cin >> key;
cout << key << '\n';
for (int i = 1; i < n; i++) {
int a;
cin >> a;
if (a >= key)right.push(a);
else left.push(a);
if (right.size() - left.size() >= 0 && right.size() - left.size() <=1) {
cout << key << '\n';
}
else if (left.size() - right.size() <= 1 && (left.size() - right.size() >= 0 && (left.size() + right.size()) % 2 == 0)) {
cout << key << '\n';
}
else {
if (right.size() > left.size()) {
left.push(key);
key = right.top();
right.pop();
}
else {
right.push(key);
key = left.top();
left.pop();
}
cout << key << '\n';
}
}
return 0;
}