백준 28279 c++
#include <iostream>
#include <vector>
#include <list>
//덱 구현이 목표이므로 덱 사용 불가
using namespace std;
int input(int lower, int upper);
void input_instructor(vector <int>& instructor, int size);
void print_instructor_result(vector <int>& instructor);
int main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N;
vector <int> instructor;
N = input(1, 1000000);
input_instructor(instructor, N);
print_instructor_result(instructor);
return 0;
}
int input(int lower, int upper)
{
//cout << "input" << endl;
int A;
while (1)
{
cin >> A;
if (A >= lower && A <= upper)
{
break;
}
else
{
;
}
}
return A;
}
void input_instructor(vector <int>& instructor, int size)
{
//cout << "input_instructor" << endl;
int i;
int temp;
for (i = 0; i < size; i++)
{
cin >> temp;
if (temp == 1)
{
instructor.push_back(temp);
cin >> temp;
instructor.push_back(temp);
}
else if (temp == 2)
{
instructor.push_back(temp);
cin >> temp;
instructor.push_back(temp);
}
else
{
instructor.push_back(temp);
}
}
return;
}
void print_instructor_result(vector <int>& instructor)
{
//cout << "print_instructor_result" << endl;
int temp;
int i = 0, total_size = instructor.size();
list <int> psuedo_deque;
while (i < total_size)
{
temp = instructor[i];
if (temp == 1)//정수를 덱의 앞에 넣는다
{
i++;
temp = instructor[i];
psuedo_deque.push_front(temp);
}
else if (temp == 2)//정수를 덱의 뒤에 넣는다
{
i++;
temp = instructor[i];
psuedo_deque.push_back(temp);
}
else if (temp == 3)//덱에 정수가 있다면 맨 앞의 정수를 빼고 출력
{
if (psuedo_deque.empty())//덱이 비어있을 때
{
cout << "-1" << "\n";
}
else//덱이 비어있지 않을 때
{
cout << psuedo_deque.front() << "\n";
psuedo_deque.pop_front();
}
}
else if (temp == 4)//덱에 정수가 있다면 맨 뒤의 정수를 빼고 출력
{
if (psuedo_deque.empty())//덱이 비어있을 때
{
cout << "-1" << "\n";
}
else//덱이 비어있지 않을 때
{
cout << psuedo_deque.back() << "\n";
psuedo_deque.pop_back();
}
}
else if (temp == 5)//덱에 들어있는 정수의 개수
{
cout << psuedo_deque.size() << "\n";
}
else if (temp == 6)//덱이 비어있으면 1, 아니면 0 출력
{
if (psuedo_deque.empty())//덱이 비어있을 때
{
cout << "1" << "\n";
}
else//덱이 비어있지 않을 때
{
cout << "0" << "\n";
}
}
else if (temp == 7)//덱에 정수가 있다면 맨 앞의 정수 출력, 없으면 -1 출력
{
if (psuedo_deque.empty())//덱이 비어있을 때
{
cout << "-1" << "\n";
}
else//덱이 비어있지 않을 때
{
cout << psuedo_deque.front() << "\n";
}
}
else //8 //덱에 정수가 있다면 맨 뒤의 정수 출력, 없으면 -1 출력
{
if (psuedo_deque.empty())//덱이 비어있을 때
{
cout << "-1" << "\n";
}
else//덱이 비어있지 않을 때
{
cout << psuedo_deque.back() << "\n";
}
}
i++;
}
return;
}