[알고리즘 스터디] 3주차_큐_백준 10845

·2022년 11월 14일
1

Algorithm Study

목록 보기
40/77
post-custom-banner

문제

정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.

명령은 총 여섯 가지이다.
- push X: 정수 X를 큐에 넣는 연산이다.
- pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다.
만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- size: 큐에 들어있는 정수의 개수를 출력한다.
- empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
- front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- back: 큐의 가장 뒤에 있는 정수를 출력한다.
만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.

입력

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

출력

출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.

코드

#include <iostream>

using namespace std;

enum { eMaxCount = 10001, };

class Queue
{
public:
    Queue()
        : muCount(0u)
        , muFront(0u)
        , muBack(0u)
    {
    }

    void Push(int _iData)
    {
        if (eMaxCount <= muCount)
        {
            cout << "Queue overflow!" << endl;
            return;
        }

        miarrData[muBack] = _iData;
        muBack = (muBack + 1) % eMaxCount; // Linear queue가 아니기 때문. Ring queue.
        ++muCount;
    }

    int size()
    {
        return muCount;
    }

    bool Empty(void)
    {
        return 0 == muCount ? true : false;
    }

    int Front(void)
    {
        if (true == Empty())
        {
            // cout << "Queue underflow!" << endl;
            return -1;
        }

        return miarrData[muFront];
    }

    int Back(void)
    {
        if (true == Empty())
        {
            // cout << "Queue underflow!" << endl;
            return -1;
        }

        return miarrData[muBack-1];
    }

    void Pop(void)
    {
        if (true == Empty())
        {
            // cout << "Queue underflow!" << endl;
            return;
        }

        muFront = (muFront + 1) % eMaxCount;
        --muCount;
    }

private:
    int miarrData[eMaxCount];
    unsigned int muCount;
    unsigned int muFront;
    unsigned int muBack;
};

int main()
{
    int Entry = 0;
    Queue* NewQueue = new Queue();

    std::cin >> Entry;

    for (int i = 0; i < Entry; i++)
    {
		std::string EntryWord = "";
        std::cin >> EntryWord;

        if (EntryWord == "push")
        {
            int tempInt = 0;
            cin >> tempInt;

            NewQueue->Push(tempInt);
        }

        else if (EntryWord == "pop")
        {
           std::cout << NewQueue->Front()<<std::endl;
           NewQueue->Pop();
        }

        else if (EntryWord == "front")
        {
            std::cout << NewQueue->Front() << std::endl;
        }
        
        else if (EntryWord == "back")
        {
            std::cout << NewQueue->Back() << std::endl;
        }

        else if (EntryWord == "size")
        {
            std::cout << NewQueue->size() << std::endl;
        }

        else if (EntryWord == "empty")
        {
            if (true == NewQueue->Empty())
            {
				std::cout << 1 << std::endl;
            }

            else
            {
                std::cout << 0 << std::endl;
            }
        }

        else
        {
          	return 0;
        }
    }

    return 0;
}

post-custom-banner

0개의 댓글