거의 알고리즘 일기장

프로그래머스lv3 _ 이중우선순위큐 본문

알고리즘 문제풀이

프로그래머스lv3 _ 이중우선순위큐

건우권 2020. 9. 4. 11:09

programmers.co.kr/learn/courses/30/lessons/42628

 

코딩테스트 연습 - 이중우선순위큐

 

programmers.co.kr


풀이방법

문제는 최대힙으로 풀라고 권장하지만 multiset으로 푸는편이 더 깔끔하고 쉬워서 그렇게 풀었다.

참고로 multiset은 자동 정렬이 된다.


코드

#include <string>
#include <vector>
#include <algorithm>
#include <set>
#include <iostream>

using namespace std;

vector<int> solution(vector<string> operations) {
    vector<int> answer;
    
    multiset<int> container;

    for (auto ele : operations)
    {
        if (ele[0] == 'I')
        {
            string strNum = ele.substr(2, ele.size() - 2);
            int num = stoi(strNum);
            container.insert(num);
        }
        else if(ele[0] == 'D')
        {
            //비었을경우 무시
            if (container.empty())
                continue;

            if (ele[2] == '1')
                container.erase(--end(container));
            else
                container.erase(begin(container));
        }
    }

    if (container.empty())
        answer = { 0, 0 };
    else
        answer = { *(--end(container)), *begin(container)};

    cout << answer[0] << " " << answer[1] << endl;

    return answer;
}

 

멀티셋을 이용하니 간단했다.

반응형
Comments