이중 우선순위 큐는 다음 연산을 할 수 있는 자료구조를 말합니다.
명령어 | 수신탑(높이) |
---|---|
I 숫자 | 큐에 주어진 숫자를 삽입합니다. |
D 1 | 큐에서 최댓값을 삭제합니다. |
D -1 | 큐에서 최솟값을 삭제합니다. |
이중 우선순위 큐가 할 연산 operations가 매개변수로 주어질 때, 모든 연산을 처리한 후 큐가 비어있으면 [0,0] 비어있지 않으면 [최댓값, 최솟값]을 return 하도록 solution 함수를 구현해주세요.
#include <string>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
vector<int> solution(vector<string> operations) {
vector<int> answer;
deque<int> dq;
for(string op : operations) {
if(op[0] == 'I') {
dq.push_back(stoi(op.substr(2)));
sort(dq.begin(), dq.end());
} else {
if(dq.empty()) continue;
if(op[2] == '1') {
dq.pop_back();
} else {
dq.pop_front();
}
}
}
if(dq.empty()) {
answer.push_back(0);
answer.push_back(0);
} else {
answer.push_back(dq.back());
answer.push_back(dq.front());
}
return answer;
}
처음엔 최댓값용/최솟값용 우선순위큐를 각각 만들어 해결했다가
덱을 활용하면 훨씬 간단할 것 같아서 바꿨다
탁월한 선택이었다>_<ㅋ