이런 자료구조가 있었나.. 배웠던 것도 같은데 초면인 것 같은 이 기분
queue
와 stack
을 합친 버전으로, 다방면으로 데이터에 접근할 수 있다.
헤더로 #include <deque>
을 추가하여 사용한다.
함수들도 다 어디서 본 것들이라 아주 좋다.
느낌상 초면인 것 같으니 간결히 정리해보자.
push_front()
deque<int> dq; // 10 20 이 들어있다고 가정
dq.push_front(30); // 30 10 20
push_back()
deque<int> dq; // 10 20 이 들어있다고 가정
dq.push_back(30); // 10 20 30
pop_front()
deque<int> dq; // 10 20 이 들어있다고 가정
dq.pop_front(); // 10
pop_back()
deque<int> dq; // 10 20 이 들어있다고 가정
dq.pop_back(); // 20
insert()
deque<int> dq; // 10 20 이 들어있다고 가정
dq.insert(dp.begin() + 1, 30); // 10 30 20
erase()
deque<int> dq; // 10 20 이 들어있다고 가정
dq.erase(dp.begin() + 1); // 10
clear()
deque<int> dq; // 10 20 이 들어있다고 가정
dq.clear(); // {}
empty()
deque<int> dq; // 10 20 이 들어있다고 가정
dq.empty(); // 0 -> 비어있지 않기 때문
size()
deque<int> dq; // 10 20 이 들어있다고 가정
dq.size(); // 2
문제 속 명령어와 함수를 적절히 연결해주면 된다.
3과 7, 그리고 4와 8이 비슷해서 묶어줬다.
#include <iostream>
#include <deque>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
deque<int> dq;
int n, order, x;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> order;
if (order == 1) {
cin >> x;
dq.push_front(x);
}
else if (order == 2) {
cin >> x;
dq.push_back(x);
}
else if (order == 3 || order == 7) {
if (!dq.empty()) {
cout << dq.front() << "\n";
if (order == 3) dq.pop_front();
}
else cout << "-1\n";
}
else if (order == 4 || order == 8) {
if (!dq.empty()) {
cout << dq.back() << "\n";
if (order == 4) dq.pop_back();
}
else cout << "-1\n";
}
else if (order == 5) {
cout << dq.size() << "\n";
}
else {
cout << dq.empty() << "\n";
}
}
return 0;
}