728x90
priority_queue<int, vector<int>, greater<int>> => Min Heap
priority_queue<int, vector<int>, less<int>> => Max heap
์ฐ์ ์์ ํ๋ ์ต๋๊ฐ๊ณผ ์ต์๊ฐ์ ๊ฐ์ฅ ํจ์จ์ ์ผ๋ก ํ์ธํ ์ ์๋ ๋ฐฉ๋ฒ์ด๋ฏ๋ก ํด๋น STL์ ์ฌ์ฉํ๋ค๋ฉด ์์ฝ๊ฒ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค. ์ฌ๊ธฐ์ ์ค์ํ ๊ฒ์ ๋ ๊ฐ์ Heap์ผ๋ก ํ๋์ ์ํฉ์ ์ฒ๋ฆฌํ๋ค๋ณด๋๊น heap์ ํฌ๊ธฐ๋ฅผ ๋์ผํ๊ฒ ์นด์ดํธ ํด์ค ์ ์๋ ๋ณ์๊ฐ ํ์ํ๋ค๋ ์ ์ด๋ค. ๋ง์ฝ pop์ ํ๋๋ฐ ํฌ๊ธฐ๊ฐ 0์ด ๋ ๊ฒฝ์ฐ ๋ ๊ฐ์ Heap์ ๋ชจ๋ ์ด๊ธฐํํด์ค ํ์๊ฐ ์์๋ค. (์ ์ผ ์ค์ํ ์ )
#include <string>
#include <vector>
#include <queue>
#include <iostream>
#include <sstream>
using namespace std;
vector<int> solution(vector<string> operations) {
vector<int> answer;
int heap_size = 0;
// Max ํ๊ณผ Min ํ์ ์ ์ธํ๋ค.
priority_queue<int, vector<int>, greater<int>> min_heap;
priority_queue<int, vector<int>, less<int>> max_heap;
for(int i = 0 ; i < operations.size() ; i++) {
// ๊ณต๋ฐฑ์ ํฌํจํ ๋ฌธ์๋ฅผ ์ฝ๊ฒ ๊ตฌ๋ถํ๊ธฐ ์ํ ๋น๋์
string str[3];
string token;
// stringstream์ผ๋ก token์ ๋ง๋ค์ด ์ ๋ฆฌํด๋๋๋ค.
stringstream ss(operations[i]);
int count = 0;
// str ๋ฒกํฐ ์์ ์ํ๋ ๊ฐ์ ๋ด๋๋ค.
while(ss >> token)
str[count++] = token;
// str[0] ์๋ ๋ฌธ์ str[1]์๋ ์ถ๊ฐํ ์ซ์๊ฐ ๋ค์ด๊ฐ๋ค.
int digit = stoi(str[1]);
// I ์ธ ๊ฒฝ์ฐ max์ min Heap์ ๊ฐ์ ๋ฃ์ด์ค๋ค.
if(str[0] == "I") {
heap_size++;
max_heap.push(digit);
min_heap.push(digit);
}
// D์ธ ๊ฒฝ์ฐ pop์ ์ํํ๋ค.
else if(str[0] == "D" && heap_size != 0) {
// pop์ ๊ฒฝ์ฐ heap์ ์ ์ฒด์ ์ธ ์ฌ์ด์ฆ๋ฅผ ํ๋์ฉ ์ค์ฌ์ค๋ค.
heap_size--;
// ๋ง์ฝ heap์ ์ค์๋๋ฐ ์ฌ์ด์ฆ๊ฐ 0์ด ๋์์ผ๋ฉด ๋ค์ ์ด๊ธฐํ๋ฅผ ํด์ผํ๋ค.
if(heap_size == 0) {
min_heap = priority_queue<int, vector<int>, greater<int>>();
max_heap = priority_queue<int, vector<int>, less<int>>();
}
// digit์ด 1์ธ ๊ฒฝ์ฐ ์ต๋๊ฐ์ ์ ๊ฑฐํ๋ฏ๋ก max_heap์ pop์ ํ๋ค.
if(digit == 1) {
if(!max_heap.empty()) {
max_heap.pop();
}
}
// digit์ด -1์ธ ๊ฒฝ์ฐ ์ต์๊ฐ์ ์ ๊ฑฐํ๋ฏ๋ก min_heap์ pop์ ํ๋ค.
else if(digit == -1) {
if(!min_heap.empty())
min_heap.pop();
}
}
}
// ํ์ ํฌ๊ธฐ๊ฐ 0์ธ ๊ฒฝ์ฐ [0, 0] ์ ๋ฃ์ด์ค๋ค.
if(heap_size == 0) {
answer.push_back(0);
answer.push_back(0);
}
// ์๋ ๊ฒฝ์ฐ ์ต๋๊ฐ๊ณผ ์ต์๊ฐ์ top์ ์ถ๊ฐํ๋ค.
else {
answer.push_back(max_heap.top());
answer.push_back(min_heap.top());
}
return answer;
}
'๐ Self Study > ๐ Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค (๋์คํฌ ์ปจํธ๋กค๋ฌ, ํ(Heap)) C++ (0) | 2022.01.05 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค (๊ฐ์ฅ ํฐ ์, ์ ๋ ฌ) C++ (0) | 2022.01.04 |
ํ๋ก๊ทธ๋๋จธ์ค (ํ๋ฆฐํฐ, ์คํ/ํ) C++ (0) | 2022.01.04 |
ํ๋ก๊ทธ๋๋จธ์ค (์ง์ง์ด ์ ๊ฑฐํ๊ธฐ, 2017 ํ์คํ์ด) C++ (0) | 2022.01.04 |
ํ๋ก๊ทธ๋๋จธ์ค (๊ธฐ๋ฅ ๊ฐ๋ฐ, ์คํ/ํ) C++ (0) | 2022.01.03 |