문제

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

 

10845번: 큐

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

www.acmicpc.net

 

소스코드

#include <string>
#include <iostream>
using namespace std;

struct Node
{
	Node* next = nullptr;
	int value;

	Node(int val)
	{
		this->value = val;
	}
};

class Queue
{
private:
	Node* start = nullptr;
	Node* end = nullptr;
	int size = 0;
public:
	void Push(int val)
	{
		Node* newNode = new Node(val);
		if (start == nullptr)
		{
			start = end = newNode;
		}
		else
		{
			end->next = newNode;
			end = newNode;
		}
		size++;
	}

	int Pop()
	{
		if (size > 0)
		{
			int value = start->value;
			Node* temp = start->next;
			start = nullptr;
			delete start;
			start = temp;
			size--;
			return value;
		}
		return -1;
	}

	int Size()
	{
		return size;
	}

	int Empty()
	{
		if (size == 0) { return 1; }
		return 0;
	}

	int Front()
	{
		if (size > 0) { return start->value; }
		return -1;
	}

	int Back()
	{
		if (size > 0) { return end->value; }
		return -1;
	}
};


int main(void) {
	int N;
	Queue myQ;
	string command;
	int val;

	cin >> N;

	for (int i = 0; i < N; i++)
	{
		cin >> command;
		if (command == "push")
		{
			cin >> val;
			myQ.Push(val);
		}
		else if (command == "pop")
		{
			cout << myQ.Pop() << endl;
		}
		else if (command == "size")
		{
			cout << myQ.Size() << endl;
		}
		else if (command == "empty")
		{
			cout << myQ.Empty() << endl;
		}
		else if (command == "front")
		{
			cout << myQ.Front() << endl;
		}
		else if (command == "back")
		{
			cout << myQ.Back() << endl;
		}
	}
	return 0;
}

 

큐를 사용 할 수 있었지만 만들어서 문제를 풀어보았다.

 

 

Posted by pi92

블로그 이미지
pi92

공지사항

Yesterday
Today
Total

달력

 « |  » 2025.5
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

최근에 올라온 글

최근에 달린 댓글

글 보관함