본문으로 바로가기

백준 07662 - 이중 우선순위 큐

category BOJ 백준/기타 2020. 11. 12. 12:54

출처 : 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