#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쓰는게 나았을 것 같다)
'오늘의 알고리즘' 카테고리의 다른 글
[C++]완전탐색 카펫(프로그래머스 2레벨) (0) | 2022.04.01 |
---|---|
[C++]정렬 H-Index(프로그래머스 2레벨) (0) | 2022.03.31 |
[C++]스택/큐 다리를 지나는 트럭(프로그래머스 2레벨) (0) | 2022.03.29 |
[C++]해시 위장(프로그래머스 2레벨) (0) | 2022.03.28 |
[C++]연습문제2 x n 타일링(프로그래머스 3레벨) (0) | 2022.03.26 |