본문 바로가기
[백준]

[BaekJoon/백준] 7662번 C++

by Hevton 2021. 4. 5.
반응형

 

처음에는 우선순위 큐(priority_queue) 두개를 사용해서 문제를 풀어보려 시도했다.

근데 단순히 두 개만 이용할 것도 아니고, 이미 삭제된 노드에 대해서도 서로 체크해줘야 하는 어려움이 있었다.

나는 결국 우선순위 큐 두개를 사용해서 풀진 못했지만 그런 방법도 있다!

velog.io/@leehj8896/백준-7662번-이중-우선순위-큐

 

 

검색을 하다가, STL <set> 에 있는 multiset 자료구조를 알게 되었다.

이 자료구조는 이름에 맞게, 중복도 허용해주지만

알아서 정렬을 시켜준다는 점이 크게 매력적이였다.

 

이 자료구조를 이용하면 이 문제를 엄청나게 간단하게 풀 수 있었다.

#include <iostream>
#include <set>

using namespace std;

int T, N, input;


int main() {
        
    ios::sync_with_stdio();
    cin.tie(NULL);
        
    string command;

    cin >> T;
    
    while(T--) {
        
        cin >> N;
        
        multiset<int> ms;
        
        while(N--) {
            
            cin >> command;
            
            if(command == "I") {
                cin >> input;
                ms.insert(input);
            } else if(command == "D") {
                cin >> input;
                
                if(ms.empty())
                    continue; // 무시

                if(input == 1) {
                    // end 는 마지막 노드 다음을 가리키고 있다.
                    multiset<int>::iterator it =  ms.end();
                    it--;
                    ms.erase(it);
                } else if(input == -1) {
                    ms.erase(ms.begin());
                }
            }
            
        }
        
        if(ms.empty())
            cout << "EMPTY\n";
        else {
            // end 는 마지막 노드 다음을 가리키고 있다.
            multiset<int>::iterator it =  ms.end();
            it--;
            cout << *(it) << " " << *(ms.begin()) << '\n';
        }
        
    }
}

관련 자료는 아래 블로그에 잘 정리되어 있어서 참고하면 좋을 것 같다!

sorious77.tistory.com/113

반응형

'[백준]' 카테고리의 다른 글

[BaekJoon/백준] 11279번 C++  (0) 2021.04.06
[BaekJoon/백준] 9095번 C++  (0) 2021.04.06
[BaekJoon/백준] 7576번 C++  (0) 2021.04.02
[BaekJoon/백준] 2606번 C++  (0) 2021.04.01
[BaekJoon/백준] 1927번 C++  (0) 2021.03.31