[백준] 10866번-덱 C++

forunhyuck·2023년 6월 25일


✍ 입출력

입력: 명령의 수 몇개인가 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();
		}
	}
}
profile
Just do it

0개의 댓글