๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm ๐Ÿง‘๐Ÿป‍๐Ÿ’ป/๋ฐฑ์ค€(BOJ)

[๋ฐฑ์ค€,c++] 2696๋ฒˆ - ์ค‘์•™๊ฐ’ ๊ตฌํ•˜๊ธฐ

by ์•ˆ์ฃผํ˜• 2022. 3. 29.

๋ฌธ์ œ

 

2696๋ฒˆ: ์ค‘์•™๊ฐ’ ๊ตฌํ•˜๊ธฐ

์ฒซ์งธ ์ค„์— ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜ T(1 ≤ T ≤ 1,000)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ฒซ์งธ ์ค„์—๋Š” ์ˆ˜์—ด์˜ ํฌ๊ธฐ M(1 ≤ M ≤ 9999, M์€ ํ™€์ˆ˜)์ด ์ฃผ์–ด์ง€๊ณ , ๊ทธ ๋‹ค์Œ ์ค„๋ถ€ํ„ฐ ์ด ์ˆ˜์—ด์˜ ์›์†Œ๊ฐ€ ์ฐจ๋ก€๋Œ€๋กœ ์ฃผ

www.acmicpc.net

 

์ฝ”๋“œ

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

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    int T; cin>>T;
    while(T--){
        int n; cin>>n;
        priority_queue<int> max_heap;   // max_heap์—๋Š” ์ค‘๊ฐ„๊ฐ’ ์ดํ•˜์˜ ๊ฐ’๋งŒ ๋‹ด๊ฒจ์•ผ ํ•œ๋‹ค.
        priority_queue<int,vector<int>,greater<>> min_heap;
        vector<int>ans;
        int mid = 0;
        for(int i=1; i<=n; i++){
            int number; cin>>number;
            if(i==1) mid = number;
            
            if(mid<number) min_heap.push(number);
            else max_heap.push(number);
            
            if(i&1){    // ํ™€์ˆ˜ ๋ฒˆ์งธ ์ˆซ์ž์ผ ๋•Œ
                while(min_heap.size()>max_heap.size()){
                    mid = min_heap.top();
                    max_heap.push(mid);
                    min_heap.pop();
                }
                while(min_heap.size()<max_heap.size()){
                    mid = max_heap.top();
                    min_heap.push(mid);
                    max_heap.pop();
                }
                ans.push_back(mid);
            }
            
        }
        
        cout<<ans.size()<<'\n';
        for(int i=0; i<ans.size(); i++){
            if(i%10==0&&i!=0) cout<<'\n';
            cout<<ans[i]<<' ';
        }
    }
}

 

ํ’€์ด

์ƒ๋‹นํžˆ ์–ด๋ ค์› ๊ณ  ํ’€์ด์™€ ์ดํ•ด๊นŒ์ง€ ์˜ค๋ž˜ ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค. ์ผ๋‹จ ์ด ๋ฌธ์ œ์˜ ๊ฒฝ์šฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ 1000, ์ˆ˜์—ด์˜ ํฌ๊ธฐ๊ฐ€ 9999๊นŒ์ง€ ๋“ค์–ด์˜ต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋งค๋ฒˆ ์ž…๋ ฅ๊ฐ’์ด ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค ์ •๋ ฌํ•œ ํ›„ ์ค‘์•™๊ฐ’์„ ๋ฝ‘์•„๋‚ด๊ฒŒ ๋˜๋ฉด 1000*9999*์ •๋ ฌ(nlogn)์ด๊ธฐ ๋•Œ๋ฌธ์— ์ œํ•œ์‹œ๊ฐ„ ์•ˆ์— ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ max_heap๊ณผ min_heap ์ด์ค‘ ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์จ์„œ ๋ฌธ์ œ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ ํ•ต์‹ฌ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์€ ์•„๋ž˜ ์„ธ ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

  1. max_heap์—๋Š” ์ค‘์•™๊ฐ’ ์ดํ•˜์˜ ๊ฐ’๋งŒ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.
  2. ํ™€์ˆ˜๋ฒˆ์งธ ์ˆซ์ž์ผ ๋•Œ max_heap๊ณผ min_heap์˜ ๊ฐœ์ˆ˜๋ฅผ ๋™์ผํ•˜๊ฒŒ ๋งž์ถฐ์•ผ ํ•œ๋‹ค.(๋งŽ์€ ์ชฝ์—์„œ ์ ์€ ์ชฝ์œผ๋กœ ์ด๋™ํ•œ๋‹ค.)
  3. 2๋ฒˆ์—์„œ ์ด๋™ํ•  ๋•Œ๋งˆ๋‹ค ์ด๋™ํ•˜๋Š” ๊ฐ’์ด ์ค‘์•™๊ฐ’์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ณ„์† ๊ฐฑ์‹ ํ•ด ์ค€๋‹ค.

๋‹ค์Œ๋ฒˆ์— ์œ ์‚ฌํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ๋•Œ๋Š” ์ด๋ฒˆ ๋ฌธ์ œ๋ฅผ ๋– ์˜ฌ๋ ค์„œ ์†์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์—ˆ์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค.

๋Œ“๊ธ€