주어진 조건의 입력값에 따라 규칙에 따른 연산을 해주면 된다. 모든 연산을 하고 남은 데이터에 대한 최소 최대값을 벡터에 담아 리턴해주면 된다.
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;
}