C++:: 프로그래머스 < 이중우선순위큐 >

jahlee·2023년 8월 22일
0

프로그래머스_Lv.3

목록 보기
13/29
post-thumbnail

주어진 조건의 입력값에 따라 규칙에 따른 연산을 해주면 된다. 모든 연산을 하고 남은 데이터에 대한 최소 최대값을 벡터에 담아 리턴해주면 된다.
map의 iterator를 다루는게 조금 까다로울 수 도 있는 문제이다.

/* map의 마지막 요소에 대해 접근을 할때 다음과 같은 접근은 오류가 발생한다. */
	map<int, int> m;
    map<int, int>::iterator iter = m.end() - 1;// 오류!
    
    map<int, int>::iterator iter = m.end()--;// 다음과 같은 전위, 후위 연산자만 지원한다.
#include <string>
#include <vector>
#include <map>
using namespace std;

vector<int> solution(vector<string> operations) {
    vector<int> answer(2, 0);
    map<int, int> data;
    for (auto oper : operations) {
        if (oper == "D 1" && !data.empty() && --(--data.end())->second == 0) {
            data.erase((--data.end())->first);     
        } else if (oper == "D -1" && !data.empty() && --(data.begin()->second) == 0) {
            data.erase(data.begin()->first);
        } else if (oper[0] == 'I') {
            data[stoi(oper.substr(2))]++;
        }
    }
    if (!data.empty()) {
        answer[0] = (--data.end())->first;
        answer[1] = data.begin()->first;
    }
    return answer;
}

0개의 댓글