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

Peace·2021년 6월 27일
0

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

문제 접근

문제 제목대로, 이중 우선순위 큐여서, 우선 순위 큐를 두개를 두고, 우선순위 큐에 들어온 숫자와 나간 숫자를 세줘서, 우선 순위 큐의 비어있는 여부를 체크주었다.
다른 사람들 풀이를 보니, set을 사용해서 푼 사람들이 많았다.
set은 안에 있는 모든 숫자를 sort해주기 때문에 해당 문제에 좀 더 유리한 것 같았다.

코드 쿠현(c++)

#include <string>
#include <vector>
#include <iostream>
#include <queue>

using namespace std;

vector<int> solution(vector<string> operations) {
    vector<int> answer;
    priority_queue<int, vector<int>, less<int> > max_heap;
    priority_queue<int, vector<int>, greater<int> > min_heap;
    int in = 0;
    int out = 0;
    for(int i = 0 ; i < operations.size() ; i++){
        if(operations[i][0] == 'I'){ // push
            string temp = "";
            for(int j = 2 ; j < operations[i].length() ; j++){
                temp += operations[i][j];
            }
            max_heap.push(stoi(temp));
            min_heap.push(stoi(temp));
            in++;
        }
        else{
            if(in == out) {
                while(!max_heap.empty())max_heap.pop();
                while(!min_heap.empty())min_heap.pop();
                continue;
            }    
            if(operations[i][2] == '1'){
                max_heap.pop();
                out++;
            }
            else{
                min_heap.pop();
                out++;
            }
        }
        if(in == out) {
                while(!max_heap.empty())max_heap.pop();
                while(!min_heap.empty())min_heap.pop();
        }    
    }
    if(in == out){
        answer.push_back(0);
        answer.push_back(0);
    }
    else{
        answer.push_back(max_heap.top());
        answer.push_back(min_heap.top());
    }
    return answer;
}
profile
https://peace-log.tistory.com 로 이사 중

0개의 댓글