포스트

[프로그래머스] 이중우선순위큐

코딩테스트 연습 - 이중우선순위큐 문제 바로가기


문제 설명

01

이 문제의 핵심은 최솟값과 최댓값을 실시간으로 제거할 수 있는지 입니다.
큐를 그대로 사용할 경우, C++ 에서 최대힙을 사용하기 때문에 최댓값은 바로 구할 수 있지만
최솟값은 삽입 시 -1 을 곱해야 빠르게 구할 수 있습니다.

따라서 이 문제점을 개선하고자 중복이 가능하고 실시간으로 원소들을 정렬하는
multiset 을 사용해서 문제를 해결하였습니다.


제출 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <string>
#include <vector>
#include <set>

using namespace std;

vector<int> solution(vector<string> operations) {
    multiset<int> set;
    
    for(auto oper : operations) {
        if(oper[0] == 'I') {
            int value = stoi(oper.substr(2));
            set.insert(value);
        } if(oper == "D 1" && false == set.empty()) {
            set.erase(--set.end());
        } else if(oper == "D -1" && false == set.empty()) {
            set.erase(set.begin());
        }
    }
    
    vector<int> answer(2, 0);
    if(false == set.empty()) {
        answer[0] = *(set.rbegin());
        answer[1] = *(set.begin());
    }
    return answer;
}

제출 결과

01

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.