간단히 큐를 구현하는 문제입니다. 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을 쓰면 시간 초과가 발생합니다.
'알고리즘 > 백준' 카테고리의 다른 글
[백준/C,C++] 11866번: 요세푸스 문제 0 (0) | 2021.03.15 |
---|---|
[백준/C,C++] 2164번: 카드2 (0) | 2021.03.15 |
[백준/C,C++] 13305번: 주유소 (0) | 2021.03.14 |
[백준/C,C++] 1541번: 잃어버린 괄호 (0) | 2021.03.14 |
[백준/C,C++] 11399번: ATM (0) | 2021.03.13 |
댓글