오답노트

[그래프] BOJ 10845번 큐 본문

C,C++/코딩테스트

[그래프] BOJ 10845번 큐

권멋져 2022. 5. 17. 19:06
https://www.acmicpc.net/problem/10845
 

10845번: 큐

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

www.acmicpc.net

- 문제파악

큐의 구조를 파악할 수 있는 문제

 

- 정답

큐는 선입선출이다. 즉 먼저 들어온 요소가 나갈때도 먼저 나간다. 해당 문제에서 pop과 같다. C++ stl에서 queue를 제공하고 있다. 

 

#include "bits/stdc++.h"

using namespace std;

int arr[10002];
int nsize = 0;

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

void pop()
{
	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 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")
		{
			cin >> nCmd;
			push(nCmd);
		}
		else
		{
			if (cmd == "pop")
				pop();
			else if (cmd == "size")
				size();
			else if (cmd == "empty")
				empty();
			else if (cmd == "front")
				front();
			else if (cmd == "back")
				back();

		}

	}
	
}