

입력: 명령의 수 몇개인가 T , T개의 명령들
출력: 한줄에 하나씩 수행한 것 출력

🖥️ Key Point: C++ STL 에서는 deque 존재
그렇지만 class 형식으로 구현해보았다.
deque(덱) 이란? queue는 front에서 출력되고 rear에서 입력 되지만 deque는 double ended queue 의 줄임말로써 front, rear 두 부분 다에서 삽입과 출력이 가능하다.
#include<iostream>
using namespace std;
class Deque {
private:
int* deque;
int begin, end;
public:
Deque(int n) {
deque = new int[n];
begin = -1;
end = -1;
}
bool empty() {
if (begin == -1 || begin > end) {
return true;
}
else {
return false;
}
}
void push_front(int x) {
if (empty()) {
begin = 0;
end = 0;
deque[begin] = x;
}
else {
for (int i = end; i >= begin; i--) {
deque[i + 1] = deque[i];
}
deque[begin] = x;
end++;
}
}
void push_back(int x) {
if (empty()) {
begin = 0;
end = 0;
deque[begin] = x;
}
else {
end++;
deque[end] = x;
}
}
void pop_front() {
if (empty()) {
cout << -1 << endl;
}
else {
cout << deque[begin] << endl;
deque[begin] = NULL;
begin++;
}
}
void pop_back() {
if (empty()) {
cout << -1 << endl;
}
else {
cout << deque[end] << endl;
end--;
}
}
int size() {
if (empty()) {
return 0;
}
else {
return end-begin + 1;
}
}
void front() {
if (empty()) {
cout << -1 << endl;
}
else {
cout << deque[begin] << endl;
}
}
void back() {
if (empty()) {
cout << -1 << endl;
}
else {
cout << deque[end] << endl;
}
}
};
int main() {
int N;
cin >> N;
string str;
Deque deque(N);
while (N--) {
cin >> str;
if (str == "push_front") {
int num;
cin >> num;
deque.push_front(num);
}
else if (str == "push_back") {
int num;
cin >> num;
deque.push_back(num);
}
else if (str == "pop_front") {
deque.pop_front();
}
else if (str == "pop_back") {
deque.pop_back();
}
else if (str == "size") {
cout<<deque.size()<<endl;
}
else if (str == "empty") {
cout << deque.empty() << endl;
}
else if (str == "front") {
deque.front();
}
else if (str == "back") {
deque.back();
}
}
}