#include <string>
#include <vector>
#include <list>
#include <algorithm>
 
using namespace std;
 
vector<int> solution(vector<string> operations) 
{
    vector<int> answer = {};
    list<int> lque = {};
 
    for (int i = 0; i < operations.size(); ++i)
    {
        if (operations[i][0] == 'I')
        {
            int iNumber = stoi(operations[i].substr(2));
 
            if (lque.empty())
                lque.push_back(iNumber);
 
            else
            {
                auto iter = lque.begin();
                auto iterNext = ++lque.begin();
                auto iterEnd = lque.end();
 
                for (; iter != iterEnd; ++iter)
                {
                    if (*iter > iNumber)
                    {
                        if (iterNext != lque.end())
                        {
                            if (*iterNext < iNumber)
                            {
                                lque.insert(next(iter), iNumber);
                                break;
                            }
 
                            else
                                continue;
                        }
 
                        else
                        {
                            lque.insert(next(iter), iNumber);
                            break;
                        }
                    }
 
                    else
                    {
                        lque.insert(iter, iNumber);
                        break;
                    }
                }
            }
        }
 
        else
        {
            if (!lque.empty())
            {
                if (operations[i][2] == '-')
                    lque.pop_back();
 
                else
                    lque.pop_front();
            }
        }
    }
 
    if (lque.size() < 2)
        return {0,0};
 
    else
        return { lque.front(), lque.back() };
}

처음에 푼건 내맘대로 list를 이용해서 이중우선순위큐를 만들었다.

#include <string>
#include <vector>
#include <set>
#include <algorithm>
 
using namespace std;
 
vector<int> solution(vector<string> operations) 
{
    vector<int> answer = {};
    set<int> setQue = {};
 
    for (int i = 0; i < operations.size(); ++i)
    {
        if (operations[i][0] == 'I')
        {
            int iNumber = stoi(operations[i].substr(2));
            setQue.insert(iNumber);
        }
 
        else
        {
            if (!setQue.empty())
            {
                if (operations[i][2] == '-')
                    setQue.erase(setQue.begin());
 
                else                    
                    setQue.erase(--setQue.end());
            }
        }
    }
 
    if (setQue.size() < 2)
        return {0,0};
 
    else
    {
        int iFirst = *(setQue.begin());
        int iEnd = *(--setQue.end());
 
        return { iEnd, iFirst };
    }
}
 

set을 써서 다시 풀어본 문제 진짜 금방 풀었다

(다시 생각해보니 키 값이 중복될 수 있으니 multiset쓰는게 나았을 것 같다)

+ Recent posts