출처 : https://www.acmicpc.net/problem/7662
7662번: 이중 우선순위 큐
입력 데이터는 표준입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터의 첫째 줄에는 Q에 적
www.acmicpc.net
고려사항
- map 활용.
- map은 key를 기준으로 정렬을 해준다.
- insert 시에 map에 존재하지 않으면 (num, 1)로 삽입,
이미 존재하면 m[num] 의 value 를 +1 해준다. - delete 는 map의 사이즈가 0이 아닐 시에만 연산을 진행하고,
연산이 -1 이면, m.begin() 의 value를,
연산이 1 이면, --m.end() 의 value를 확인해보고, 1이면 삭제를, 2이상이면 -1을 해준다.
m.end()는 m의 마지막 원소 다음을 가르킨다 => --m.end() 는 마지막 원소를 가르킨다 => 키가 가장 큰 값!
#include <iostream>
#include <map>
using namespace std;
int main() {
cin.tie(NULL);
ios::sync_with_stdio(false);
int t, n, num;
char op;
cin>>t;
for(int i=0;i<t;++i){
map<int, int> m;
cin>>n;
for(int j=0;j<n;++j){
cin>>op>>num;
if(op == 'I'){
if(m.find(num) != m.end()){
++m[num];
}else{
m[num] = 1;
}
}else{
if(m.size() != 0){
if(num == -1){
if(m.begin()->second == 1){
m.erase(m.begin());
}else{
--m.begin()->second;
}
}else{
if((--m.end())->second == 1){
m.erase(--m.end());
}else{
--(--m.end())->second;
}
}
}
}
}
if(m.size() == 0){
cout<<"EMPTY\n";
}else{
cout<<(--m.end())->first<<" "<<m.begin()->first<<"\n";
}
}
return 0;
}'BOJ 백준 > 기타' 카테고리의 다른 글
| 백준 01920 - 수 찾기 (0) | 2020.11.17 |
|---|---|
| 백준 15654 - N과 M (5) (0) | 2020.11.16 |
| 백준 02749 - 피보나치 수 3 (0) | 2020.11.11 |
| 백준 12015 - 가장 긴 증가하는 부분 수열 2 (0) | 2020.11.10 |
| 백준 01717 - 집합의 표현 (0) | 2020.11.09 |
