본문 바로가기

baekjoon

1655번 가운데를 말해요

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

 

1655번: 가운데를 말해요

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

www.acmicpc.net

 

백준 2696번과 같은 문제이다. 다만 짝수일때 중앙값은 두개의 값중 작은것으로 출력해야한다. ex) 1 2 3 4일때 2 3중 작은게 중앙값

#include <bits/stdc++.h>
#define l long long
#define INF 2e9
#define p pair<int,int>
using namespace std;

priority_queue<int,vector<int>,greater<>> MinQ;
priority_queue<int,vector<int>,less<>> MaxQ;

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

    int n,num,temp;
    cin >> n;

    for(int i=1;i<=n;i++){
        cin >> num;
        if(i % 2 == 0) temp = MaxQ.top();

        if(MinQ.empty() && MaxQ.empty()) MaxQ.push(num);
        else if(MaxQ.size() > MinQ.size()){
            if(MaxQ.top() > num){
                MaxQ.push(num);
                MinQ.push(MaxQ.top());MaxQ.pop();
            }
            else MinQ.push(num);
        }
        else if(MaxQ.size() == MinQ.size()){
            if(MaxQ.top() < num){
                MinQ.push(num);
                MaxQ.push(MinQ.top());MinQ.pop();
            }
            else MaxQ.push(num);
        }

        if(i % 2 == 0) cout << min(temp,MaxQ.top()) << "\n";
        else cout << MaxQ.top() << "\n";
    }
}

'baekjoon' 카테고리의 다른 글

2357번 최솟값과 최댓값  (0) 2022.03.21
10868번 최솟값  (0) 2022.03.21
11505번 구간 곱 구하기  (0) 2022.03.21
2042번 구간 합 구하기  (0) 2022.03.21
2696번 중앙값 구하기  (0) 2022.03.21