반응형
#include <iostream>
#include <string>
using namespace std;
class Deque
{
public:
void push_front(int n)
{
_arr[_front--] = n;
_front = (10000 + _front) % 10000;
_size++;
}
void push_back(int n)
{
_arr[_back++] = n;
_back = (10000 + _back) % 10000;
_size++;
}
void pop_front()
{
if (_size == 0)
return;
_front = (10000 + _front + 1) % 10000;
_size--;
}
void pop_back()
{
if (_size == 0)
return;
_back = (10000 + _back - 1) % 10000;
_size--;
}
int size()
{
return _size;
}
bool empty()
{
if (_size == 0)
return true;
return false;
}
int front()
{
if (_size == 0)
return -1;
int a = (10000 + (_front + 1)) % 10000;
return _arr[a];
}
int back()
{
if (_size == 0)
return -1;
int a = (10000 + (_back - 1)) % 10000;
return _arr[a];
}
public:
int _arr[10000] = {};
int _front = 0;
int _back = 1;
int _size = 0;
};
int main()
{
Deque dq;
string str;
int N;
int n;
cin >> N;
while (N--)
{
cin >> str;
if (str == "push_front")
{
cin >> n;
dq.push_front(n);
}
else if (str == "push_back")
{
cin >> n;
dq.push_back(n);
}
else if (str == "pop_front")
{
if (!dq.empty())
{
cout << dq.front() << endl;
dq.pop_front();
}
else
cout << -1 << endl;
}
else if (str == "pop_back")
{
if (!dq.empty())
{
cout << dq.back() << endl;
dq.pop_back();
}
else
cout << -1 << endl;
}
else if (str == "size")
{
cout << dq.size() << endl;
}
else if (str == "empty")
{
if (dq.empty())
cout << 1 << endl;
else
cout << 0 << endl;
}
else if (str == "front")
{
if (dq.empty())
cout << -1 << endl;
else
cout << dq.front() << endl;
}
else if (str == "back")
{
if (dq.empty())
cout << -1 << endl;
else
cout << dq.back() << endl;
}
}
return 0;
}
반응형
LIST
'알고리즘 문제 > 백준' 카테고리의 다른 글
[C++] 쇠막대기 - 10799 (0) | 2022.11.19 |
---|---|
[C++] 단어 뒤집기2(stack) - 17413 (1) | 2022.11.18 |
[C++] 스택 - 10828 (0) | 2022.11.17 |
[C++] 요세푸스(Queue) - 1158 (0) | 2022.11.16 |
[C++] 에디터(list) - 1406 (0) | 2022.11.16 |