본문 바로가기
알고리즘/백준

[백준/C,C++] 18258번: 큐 2

by 이민훈 2021. 3. 15.

www.acmicpc.net/problem/18258

 

18258번: 큐 2

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

www.acmicpc.net

www.acmicpc.net/problem/10828

 

10828번: 스택

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

www.acmicpc.net

간단히 큐를 구현하는 문제입니다. 10828번: 스택과 굉장히 유사한 문제입니다. 스택이 후입선출(Last In First Out)의 구조를 가지고 있다면 큐는 선입선출(First In First Out)의 구조를 가지고 있습니다.

#include<iostream>
#include<string>

using namespace std;

#define SIZE 2000000

class Queue
{
private:
	int* queue = new int[SIZE];
	int f = 0;
	int r = 0;
public:
	void push(int n);
	int pop();
	int size();
	bool full();
	bool empty();
	int front();
	int back();
};

void Queue::push(int n)
{
	if (full()) cout << "큐가 가득 차 " << n << "을 큐에 삽입할 수 없습니다." << endl;
	else queue[r++] = n;
}

int Queue::pop()
{
	if (empty()) return -1;
	else return queue[f++];
}

int Queue::size()
{
	return r - f;
}

bool Queue::full()
{
	if (r == SIZE) return true;
	else return false;
}

bool Queue::empty()
{
	if (f == r) return true;
	else return false;
}

int Queue::front()
{
	if (empty()) return -1;
	else return queue[f];
}

int Queue::back()
{
	if (empty()) return -1;
	else return queue[r - 1];
}

int main(void)
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	Queue queue;
	int n; cin >> n;

	for (int i = 0; i < n; i++) {
		string str; cin >> str;
		if (str == "push") {
			int num; cin >> num;
			queue.push(num);
		}
		else if (str == "pop") {
			cout << queue.pop() << "\n";
		}
		else if (str == "size") {
			cout << queue.size() << "\n";
		}
		else if (str == "empty") {
			cout << queue.empty() << "\n";
		}
		else if (str == "front") {
			cout << queue.front() << "\n";
		}
		else {
			cout << queue.back() << "\n";
		}
	}

	return 0;
}

명령어의 최대 개수가 200만개로 매우 많기 때문에 시간 초과에 유의해야 합니다. iostream의 입출력 구문들은 속도가 느리기 때문에 동기화를 끊지 않거나 개행문자인 "\"대신 endl을 쓰면 시간 초과가 발생합니다.

댓글