hye3193 2025. 1. 8. 14:13

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

 

제출 코드

#include <iostream>
using namespace std;

class Queue
{
private:
    int *p_queue;
    int f, b;

public:
    Queue(int n)
    {
        p_queue = new int[n];
        f = -1;
        b = -1;
    }
    void push(int x)
    {
        p_queue[++b] = x;
    }
    int pop()
    {
        return (b - f) ? p_queue[++f] : -1;
    }
    int size()
    {
        return (b - f);
    }
    int empty()
    {
        return (b - f) ? 0 : 1;
    }
    int front()
    {
        return (b - f) ? p_queue[f + 1] : -1;
    }
    int back()
    {
        return (b - f) ? p_queue[b] : -1;
    }
};

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

    int n, input;
    string str;
    cin >> n;
    Queue queue(n);
    while(n--)
    {
        cin >> str;
        if (str == "push")
        {
            cin >> input;
            queue.push(input);
        }
        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 if (str == "back")
            cout << queue.back() << '\n';
    }
}

queue 클래스를 사용해 코드를 작성하였다

문제의 특성상 그냥 f(front cursor)와 b(back cursor)를 무한정 증가시키는 방식으로 구현했는데, 실제로 큐를 구현하기 위해서는 배열의 요소를 전체적으로 이동시키는 과정(push할 때 뒤쪽의 배열들이 전체적으로 이동)이 들어가야 될 듯하다