오답노트

[그래프] BOJ 10866번 덱 본문

C,C++/코딩테스트

[그래프] BOJ 10866번 덱

권멋져 2022. 5. 17. 19:20
https://www.acmicpc.net/problem/10866
 

10866번: 덱

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

www.acmicpc.net

- 문제 파악

덱을 구현하는 문제이다.

 

- 정답

덱은 앞으로도 뒤로도 값을 넣을수 있고, 반대로 앞으로도 뒤로도 값을 뺄수 있다.

 

#include "bits/stdc++.h"

using namespace std;

int arr[10002];
int nsize = 0;

void push_front(int k)
{
	for (int i = nsize-1; i >= 0; i--)
	{
		arr[i + 1] = arr[i];
	}

	arr[0] = k;
	nsize++;
}

void push_back(int k)
{
	arr[nsize] = k;
	nsize++;
}

void pop_front()
{
	if (nsize > 0)
	{
		cout << arr[0] << "\n";

		for (int i = 0; i < nsize; i++)
		{
			arr[i] = arr[i + 1];
		}

		nsize--;

	}
	else
		cout << "-1\n";
}

void pop_back()
{
	if (nsize > 0)
	{
		cout << arr[nsize-1] << "\n";

		arr[nsize - 1] = 0;

		nsize--;

	}
	else
		cout << "-1\n";
}

void size()
{
	cout << nsize << "\n";
}

void empty()
{	
	if(nsize == 0)
		cout << "1\n";
	else
		cout << "0\n";
}

void front()
{
	if (nsize > 0)
		cout << arr[0] << "\n";

	else
		cout << "-1\n";
}

void back()
{
	if (nsize > 0)	
		cout << arr[nsize - 1] << "\n";
	
	else
		cout << "-1\n";
}

int main()
{
	cin.tie(0);
	cout.tie(0);
	ios::sync_with_stdio(0);

	int n;
	cin >> n;

	while (n--)
	{
		string cmd;
		int nCmd;
		cin >> cmd;

		if (cmd == "push_front")
		{
			cin >> nCmd;
			push_front(nCmd);
		}
		else if (cmd == "push_back")
		{
			cin >> nCmd;
			push_back(nCmd);
		}
		else
		{
			if (cmd == "pop_front")
				pop_front();
			else if (cmd == "pop_back")
				pop_back();
			else if (cmd == "size")
				size();
			else if (cmd == "empty")
				empty();
			else if (cmd == "front")
				front();
			else if (cmd == "back")
				back();

		}

	}
	
}