[C++] 백준 28279. 덱 2

멋진감자·2024년 12월 8일
1

알고리즘

목록 보기
33/65
post-thumbnail

문제

deque

이런 자료구조가 있었나.. 배웠던 것도 같은데 초면인 것 같은 이 기분
queuestack을 합친 버전으로, 다방면으로 데이터에 접근할 수 있다.
헤더로 #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;
}

채점

profile
난멋져

0개의 댓글