๋ฌธ์
์ฝ๋
#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 ์ด์ค ์ฐ์ ์์ ํ๋ฅผ ์จ์ ๋ฌธ์ ๋ฅผ ๊ตฌํํด์ผ ํฉ๋๋ค.
๋ฌธ์ ํต์ฌ ํด๊ฒฐ๋ฐฉ๋ฒ์ ์๋ ์ธ ๊ฐ์ง์ ๋๋ค.
- max_heap์๋ ์ค์๊ฐ ์ดํ์ ๊ฐ๋ง ๋ค์ด๊ฐ ์ ์๋ค.
- ํ์๋ฒ์งธ ์ซ์์ผ ๋ max_heap๊ณผ min_heap์ ๊ฐ์๋ฅผ ๋์ผํ๊ฒ ๋ง์ถฐ์ผ ํ๋ค.(๋ง์ ์ชฝ์์ ์ ์ ์ชฝ์ผ๋ก ์ด๋ํ๋ค.)
- 2๋ฒ์์ ์ด๋ํ ๋๋ง๋ค ์ด๋ํ๋ ๊ฐ์ด ์ค์๊ฐ์ด ๋๊ธฐ ๋๋ฌธ์ ๊ณ์ ๊ฐฑ์ ํด ์ค๋ค.
๋ค์๋ฒ์ ์ ์ฌํ ๋ฌธ์ ๊ฐ ์์ ๋๋ ์ด๋ฒ ๋ฌธ์ ๋ฅผ ๋ ์ฌ๋ ค์ ์์ฝ๊ฒ ํ ์ ์์์ผ๋ฉด ์ข๊ฒ ์ต๋๋ค.
'Algorithm ๐ง๐ปโ๐ป > ๋ฐฑ์ค(BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค,c++] 18511๋ฒ - ํฐ ์ ๊ตฌ์ฑํ๊ธฐ (0) | 2022.04.03 |
---|---|
[๋ฐฑ์ค,c++] 1969๋ฒ - DNA (0) | 2022.03.31 |
[๋ฐฑ์ค,c++] 1052๋ฒ - ๋ฌผ๋ณ (0) | 2022.03.30 |
[๋ฐฑ์ค,c++] 2422๋ฒ - ํ์ค์ ์ด ์ดํ๋ฆฌ์์ ๊ฐ์ ์์ด์คํฌ๋ฆผ์ ์ฌ๋จน๋๋ฐ (0) | 2022.03.27 |
[๋ฐฑ์ค,c++] 1449๋ฒ - ์๋ฆฌ๊ณต ํญ์น (0) | 2022.03.27 |
[๋ฐฑ์ค,c++] 1254๋ฒ - ํฐ๋ฆฐ๋๋กฌ ๋ง๋ค๊ธฐ (0) | 2022.03.26 |
๋๊ธ