-
[프로그래머스/Level 3] 이중우선순위큐 (C++)알고리즘 문제풀이/프로그래머스 2021. 2. 10. 13:51
programmers.co.kr/learn/courses/30/lessons/42628
최소 힙과 최대 힙 두개를 이용하여 구현하였습니다. 구현은 두개의 힙을 이용했지만, 실제로는 하나의 힙을 이용하는 것이므로, 현재 남은 원소의 개수를 기록할 cnt 변수를 두는 것이 핵심이었습니다.
#include <string> #include <vector> #include <queue> #include <sstream> using namespace std; vector<int> solution(vector<string> operations) { vector<int> answer; int cnt = 0; priority_queue<int, vector<int>, greater<int> > minPq; // 최소 힙 priority_queue<int, vector<int>, less<int> > maxPq; // 최대 힙 for(auto o : operations) { if(cnt == 0) { while(!minPq.empty()) { minPq.pop(); } while(!maxPq.empty()) { maxPq.pop(); } } stringstream ss(o); string op, num; ss >> op >> num; if(op == "I") { minPq.push(stoi(num)); maxPq.push(stoi(num)); cnt++; } else { if(!maxPq.empty() && num == "1") { maxPq.pop(); cnt--; } else if(!minPq.empty() && num == "-1") { minPq.pop(); cnt--; } } } if(cnt == 0) { answer.push_back(0); answer.push_back(0); } else { answer.push_back(maxPq.top()); answer.push_back(minPq.top()); } return answer; }
'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Level 3] 보행자 천국 (C++) (0) 2021.02.16 [프로그래머스/Level 3] 순위 (C++) (0) 2021.02.15 [프로그래머스/Level 3] 디스크 컨트롤러 (C++) (0) 2021.02.09 [프로그래머스/Level 2] 순위 검색 (C++) (0) 2021.02.08 [프로그래머스/Level 3] 섬 연결하기 (C++) (0) 2021.02.05