[Programmers] Lv3. ์ด์ค์ฐ์ ์์ํ | C++
2023. 9. 10. 16:26ใCoding Test/Programmers
๐๋ฌธ์ ๋ณด๋ฌ๊ฐ๊ธฐ
๐ง๐ปํ์ด ๊ณผ์
(1)์๋์ผ๋ก ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋๊ณ , (2)์ค๋ณต ์ซ์ ์ ์ฅ์ด ๋๋ฉฐ, (3)์ต์๊ฐ๊ณผ ์ต๋๊ฐ์ ๋ฐ๋ก ์ ๊ทผํ ์ ์๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ ์ ํด์ผ ํฉ๋๋ค. ๋ค, ๋ฐ๋ก multiset์ด์ฃ . multiset์ ์ด์ฉํ๋ฉด ์ฝ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค.
์๊ณ ๋ฆฌ์ฆ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๊ณต๋ฐฑ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฅ์ ๋ถ๋ฆฌํ์ฌ, "๋ช ๋ น์ด"์ "๋ฐ์ดํฐ" ๋ฌธ์์ด๋ก ๋ถ๋ฆฌํฉ๋๋ค.
- "๋ช ๋ น์ด"๊ฐ 'I(๋๋ฌธ์ i)'๋ผ๋ฉด, multiset์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํฉ๋๋ค.
- "๋ช
๋ น์ด"๊ฐ 'D'๋ผ๋ฉด, ๊ทธ ๋ค์ ์ค๋ ๋ฐ์ดํฐ๊ฐ 1์ด๋, -1์ด๋์ ๋ฐ๋ผ ๋ถ๊ธฐ ์ฒ๋ฆฌํฉ๋๋ค.
- multiset์ด ๋น์๋ค๋ฉด, ๋ฌด์ํฉ๋๋ค.
- ๋ฐ์ดํฐ๊ฐ 1์ด๋ผ๋ฉด ์ต๋๊ฐ์ ์ ๊ฑฐํด์ผ ํ๋ฏ๋ก, multiset.end() - 1์ ์ ๊ฑฐํฉ๋๋ค.
- ๋ฐ์ดํฐ๊ฐ -1์ด๋ผ๋ฉด ์ต์๊ฐ์ ์ ๊ฑฐํด์ผ ํ๋ฏ๋ก, multiset.begin()์ ์ ๊ฑฐํฉ๋๋ค.
- ๋ชจ๋ ๋ช
๋ น์ ์ฒ๋ฆฌ ํ ํ, ๋ต์ ๋ฆฌํดํฉ๋๋ค.
- multiset์ด ๋น์๋ค๋ฉด, {0, 0}์ ๋ฆฌํดํฉ๋๋ค.
- ๋น์ด ์์ง ์๋ค๋ฉด, { *multiset.rbegin(), *multiset.begin() }์ ๋ฆฌํดํฉ๋๋ค.
โ๏ธ์์ค ์ฝ๋ ๋ฐ ๊ฒฐ๊ณผ
#include <string>
#include <vector>
#include <set>
#include <sstream>
using namespace std;
class DoublePriorityQueue
{
public:
vector<int> GetAnswer();
void Operate(const char instruction, int data);
bool IsEmpty() const { return _queue.empty(); }
private:
multiset<int> _queue;
};
void DoublePriorityQueue::Operate(const char instruction, int data)
{
switch (instruction)
{
case 'I':
_queue.emplace(data);
break;
case 'D':
if (IsEmpty())
return;
if (data == 1)
{
auto maxIter = _queue.end();
_queue.erase(--maxIter);
}
else if (data == -1)
{
auto minIter = _queue.begin();
_queue.erase(minIter);
}
}
}
vector<int> DoublePriorityQueue::GetAnswer()
{
if (IsEmpty())
return { 0, 0 };
return { (*_queue.rbegin()), (*_queue.begin()) };
}
vector<int> solution(vector<string> operations) {
DoublePriorityQueue dpQueue;
for (const auto& operation : operations)
{
istringstream iss(operation);
string instruction, data;
iss >> instruction >> data;
dpQueue.Operate(instruction[0], stoi(data));
}
return dpQueue.GetAnswer();
}
728x90
๋ฐ์ํ
'Coding Test > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Programmers] Lv3. ๊ฐ์ฅ ๋จผ ๋ ธ๋ | C++ (0) | 2023.10.22 |
---|---|
[Programmers] Lv3. [์นด์นด์ค ์ธํด] ๋ณด์ ์ผํ | C++ (0) | 2023.10.22 |
[Programmers] Lv2. ๋จ์ฒด์ฌ์ง ์ฐ๊ธฐ | C++ (0) | 2023.08.12 |
[Programmers] Lv2. ์นด์นด์คํ๋ ์ฆ ์ปฌ๋ฌ๋ง๋ถ | C++ (0) | 2023.07.13 |
[Programmers] Lv2. ์์ ๊ฒ์ | C++ (0) | 2023.07.10 |