본문 바로가기

문과 코린이의, [C. C++] 기록/C++ 백준 문제풀이

[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 큐 (10845)

반응형

[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 큐 (10845)

[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 큐 (10845)

 


 

 

10845번: 큐

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

www.acmicpc.net

[ 문제 ]

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

명령은 총 여섯 가지이다.

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

[ 입력 ]

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

[ 출력 ]

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

큐 push, pop 추가 설명


[ 코드 ]

#include<iostream>
using namespace std;

class Queue {
public:
	int queue[10000];
	// 큐에 포함되어있는 내용은 begin~end-1까지임
	int begin = 0;
	int end = 0;

	Queue() {}

	void push(int X) { // 정수 X를 큐에 넣는 연산
		queue[end] = X;
		end += 1;
	}

	bool empty() { // 큐가 비어있으면 1, 아니면 0 출력
		if (end == begin)
		{
			return true;
		}
		else
		{
			return false;
		}
	}

	int pop() { // 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력
		// 큐에 들어있는 정수가 없는 경우에 -1 출력
		if (empty())
		{
			return -1;
		}
		int r = queue[begin];
		queue[begin] = 0;
		begin += 1;
		return r;
	}

	int size() { // 큐에 들어있는 정수의 개수를 출력
		return end - begin; // 큐에 포함되어있는 내용은 begin~end-1까지임
	}


	int front() { // 큐의 가장 앞에 있는 정수 출력.
		// 큐에 들어있는 정수가 없는 경우에 -1 출력
		if (empty())
		{
			return -1;
		}
		return queue[begin];
	}

	int back() { // 큐의 가장 뒤에 있는 정수 출력.
		// 큐에 들어있는 정수가 없는 경우에 -1 출력
		if (empty())
		{
			return -1;
		}
		return queue[end - 1];
	}
};

int main() {
	int N; // 주어지는 명령의 수
	cin >> N;

	Queue q;

	while (N--) {

		string cmd; // 명령어
		cin >> cmd;

		if (cmd == "push")
		{
			int input; // 넣을 입력값
			cin >> input;
			q.push(input);
		}
		else if (cmd == "pop")
		{
			cout << q.pop() << '\n';
		}
		else if (cmd == "size")
		{
			cout << q.size() << '\n';
		}
		else if (cmd == "empty")
		{
			cout << q.empty() << '\n';
		}
		else if (cmd == "front") {
			cout << q.front() << '\n';
		}
		else if (cmd == "back")
		{
			cout << q.back() << '\n';
		}
	}

	return 0;
}

* 유의사항
- 아직 공부하고 있는 문과생 코린이가, 정리해서 남겨놓은 정리 및 필기노트입니다.
- 정확하지 않거나, 틀린 점이 있을 수 있으니, 유의해서 봐주시면 감사하겠습니다.
- 혹시 잘못된 점을 발견하셨다면, 댓글로 친절하게 남겨주시면 감사하겠습니다 :)
반응형