이중 우선순위 큐는 다음 연산을 할 수 있는 자료구조를 말합니다.
명령어 | 수신 탑(높이) |
I 숫자 | 큐에 주어진 숫자를 삽입합니다. |
D 1 | 큐에서 최댓값을 삭제합니다. |
D -1 | 큐에서 최솟값을 삭제합니다. |
우선 순위 큐
를 두 개 사용했다.(0, 0)
을 리턴한다.-1
을 0
으로 처리하고 있었다.끝나고 보니까 점수도 1점밖에 안 줬다.ㅂㄷㅂㄷ
#include <string>
#include <vector>
#include <queue>
using namespace std;
vector<int> solution(vector<string> operations) {
vector<int> answer;
priority_queue<int> greater_queue;
priority_queue<int> less_queue;
for(string operation : operations){
int len = operation.size();
string str = "";
for(int i=2; i<len; i++){
str+=operation[i];
}
int number = stoi(str);
if(operation[0] == 'I'){
greater_queue.push(number);
less_queue.push(-number);
}
else{
if(number == 1 && !greater_queue.empty()) {
greater_queue.pop();
}
else if(number == -1 && !less_queue.empty()) {
less_queue.pop();
}
}
}
vector<int> greater_vector;
vector<int> less_vector;
while(!greater_queue.empty()){
greater_vector.push_back(greater_queue.top());
greater_queue.pop();
}
while(!less_queue.empty()){
less_vector.push_back(-less_queue.top());
less_queue.pop();
}
bool break_loop = false;
for(int i=0; i<greater_vector.size(); i++){
for(int j = 1; j< less_vector.size(); j++){
if(greater_vector[i] == less_vector[less_vector.size()-j]){
answer.push_back(greater_vector[i]);
break_loop = true;
break;
}
}
if(break_loop) break;
}
break_loop = false;
for(int i=0; i<less_vector.size(); i++){
for(int j = 1; j< greater_vector.size(); j++){
if(less_vector[i] == greater_vector[greater_vector.size()-j]){
answer.push_back(less_vector[i]);
break_loop = true;
break;
}
}
if(break_loop) break;
}
if(answer.size() == 0) {
answer.push_back(0);
answer.push_back(0);
}
return answer;
}