10845 - 큐

2167 문제 링크

접근법

class 를 생성하고 push,pop,size … 과 같은 함수를 구현했다. 이때 front와 back을 가르키고있는 nfront,nback을 만들었다. 둘다 처음에는 0번째 배열을 가르키고 있고 nfront는 pop을 하고난 뒤 +1 이되고 nback은 push를 한뒤 +1이 된다. nfront와 nback이 같으면 empty가 참이고 front와 back은 각각 nfront 번째 배열 값과 nback 번째 배열 값을 출력하면된다.

#include <iostream>
#include <string>

using namespace std;

class Queue{
    int Q_array[10001];

public:
    int nfront;
    int nback;


    void push(int x);
    void pop();
    void size();
    void empty();
    void front();
    void back();


    Queue(){
        nfront =0;
        nback = 0;
    }

};


void Queue::push(int x)
{

    Q_array[nback] = x;
    nback+=1;

}


void Queue::pop()
{
    if(nfront == nback)
    {
        printf("-1\n");
    }else
    {
        printf("%d\n", Q_array[nfront]);
        nfront+=1;

    }
}

void Queue::size()
{
    printf("%d\n",(nback - nfront));
}



void Queue::empty()
{
    if(nfront == nback)
    {
        printf("1\n");
    }else
    {
        printf("0\n");
    }

}

void Queue::front()
{
    if(nfront == nback)
    {
        printf("-1\n");
    }else
    {
        printf("%d\n",Q_array[nfront]);
    }
}


void Queue::back()
{
    if(nfront == nback)
    {
        printf("-1\n");
    }else
    {
        printf("%d\n",Q_array[nback-1]);
    }
}








int main(int argc, char *argv[])
{
    int N=0;
    int x;
    scanf("%d",&N);
    string check;
    Queue Q = Queue();

    for(int i=0; i<N; i++)
    {

        cin >> check;

        if(check == "push")
        {
            scanf("%d",&x);
            Q.push(x);

        }else if(check == "front")
        {
            Q.front();

        }else if(check == "back")
        {
            Q.back();

        }else if(check == "size")
        {
            Q.size();

        }else if(check == "empty")
        {
            Q.empty();

        }else if(check == "pop")
        {
            Q.pop();

        }


    }


    return 0;
}

결론

큐의 개념을 알고 있다면 구현하는데 큰 어려움이 없을거라고 생각한다

업데이트: