거북이의 IT 공부

[백준 10866] 덱 - C++ 본문

Baekjoon

[백준 10866] 덱 - C++

버니빈 2020. 4. 9. 17:30

문제

https://www.acmicpc.net/problem/10866

 

10866번: 덱

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.

www.acmicpc.net

나의 코드 - C++

: STL deque를 사용하면 너무 쉬운 문제이므로 직접 구현해보았다.

덱에 관한 정보는 따로 설명해두었다.

https://bunnnybin.tistory.com/5

 

[C++] STL 벡터(vector), 리스트(list), 덱(deque) 그리고 반복자

본 글은 씹어먹는 C++(https://modoocode.com/223)를 참고하여 여기서 내가 모르고 새로운 부분을 정리하는 용도로 작성했다. 나중에 c++ 문제 풀 때 또 모르면 참고하려고!!! 반복자 : 반복자는 컨테이너에 itera..

bunnnybin.tistory.com

 

#include 
#include 

using namespace std;

const int MX = 1000005;
int dat[2 * MX + 1];
int head = MX, tail = MX;

int empty(int dat[]) {
	if (head == tail)
		return 1;
	else return 0;
}

void push_front(int dat[], int data) {
	dat[--head] = data;
}

void push_back(int dat[], int data) {
	dat[tail++] = data;
}

int pop_front(int dat[]) {
	if (empty(dat))
		return -1;
	return dat[head++];
}

int pop_back(int dat[]) {
	if (empty(dat))
		return -1;
	return dat[--tail];
}

int size(int dat[]) {
	return tail - head;
}

int front(int dat[]) {
	if (empty(dat))
		return - 1;
	return dat[head];
}

int back(int dat[]) {
	if (empty(dat))
		return -1;
	return dat[tail - 1];
}

int main() {
	int num;

	cin >> num;

	for (int i = 0; i < num; i++) {
		string com;
		cin >> com;

		if (com == "push_front") {
			int com_end;
			cin >> com_end;

			push_front(dat, com_end);
		}
		else if (com == "push_back") {
			int com_end;
			cin >> com_end;

			push_back(dat, com_end);
		}
		else if (com == "pop_front") {
			cout << pop_front(dat) << '\n';
		}
		else if (com == "pop_back") {
			cout << pop_back(dat) << '\n';
		}
		else if (com == "size") {
			cout << size(dat) << '\n';
		}
		else if (com == "empty") {
			cout << empty(dat) << '\n';
		}
		else if (com == "front") {
			cout << front(dat) << '\n';
		}
		else if (com == "back") {
			cout << back(dat) << '\n';
		}
	}
}
Comments