초보 개발자의 이야기, 릿허브

[C++] 백준 10845번 큐 본문

코딩테스트/📗 백준 (BOJ)

[C++] 백준 10845번 큐

릿99 2021. 8. 28. 10:06
728x90
반응형
1. 문제이해

10845번: 큐 (acmicpc.net)

 

10845번: 큐

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

www.acmicpc.net

 

명령어의 개수(N)와 명령어들을 입력받아 주어진 명령어들을 처리하는 알고리즘을 구현하는 것이 목표이다.

 

 

 

2. 문제풀이

 

문제 그대로 큐를 구현하면 되는 문제이다.

큐의 본래 명령어들과도 동일하기 때문에, 그대로 구현해주면 된다.

그전에 큐에 대해 살짝 알아보도록 하자.

 

란, 후입선출 구조의 스택과는 달리 선입선출 구조를 가지는 자료구조이다.

제일 먼저 넣은 데이커가 가장 먼저 나오게 되며, 큐의 가장 앞을 front, 뒤를 back이라고 한다.

큐의 구조는 다음과 같다.

 

 

큐 또한 스택처럼 C++자동적으로 구현이 되어있다. (<queue>)

큐의 기본적인 함수들은 다음과 같다.

 

1. queue <데이터타입> 이름; 형태로 선언해준다.

ex) queue <int> q;

 

2. q.push(element);

: 큐에 element(원소)를 추가한다. (가장 뒷부분에 추가)

 

3. q.pop();

: 큐의 원소를 삭제한다. (가장 앞의 원소를 삭제)

 

4. q.size();

: 큐의 사이즈를 반환한다.

 

5. q.empty();

: 큐가 비어있는지를 확인한다.

: 비어있으면 true, 아니면 false를 반환한다.

 

6. q.front();

: 큐의 가장 앞에 있는 원소를 반환한다. (가장 오래된 원소)

 

7. q.back();

: 큐의 가장 뒤에 있는 원소를 반환한다. (가장 최근의 원소)

 

 

 

3. 소스코드
#include <iostream>
#include <queue>
using namespace std;

int main() {
	queue<int> q;	// 큐
	int N;		// 명령어의 개수
	string command;	// 명령어
	int num;	// push시, 큐에 저장될 정수
	int result = 0;	// 각 명령어의 결과값

	cin >> N;

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

		// 1. push
		if (command == "push") {
			cin >> num;
			q.push(num);	// num을 큐에 저장
		}

		// 2. pop
		else if (command == "pop") {
			if (q.size() == 0) {	// 큐가 비어있으면
				result = -1;	// -1 출력
				cout << result << endl;
			}
			else {
				result = q.front();	// 아니라면 가장 앞의 값 출력
				cout << result << endl;
				q.pop();	// 출력후 pop
			}
		}

		// 3. size
		else if (command == "size") {
			cout << q.size() << endl;
		}

		// 4. empty
		else if (command == "empty") {
			if (q.size() == 0) {	// 큐가 비어있으면 1 출력
				result = 1;
				cout << result << endl;
			}
			else {	// 큐가 비어있지않으면 0 출력
				result = 0;
				cout << result << endl;
			}		
		}

		// 5. front
		else if (command == "front") {
			if (q.size() == 0) {	// 큐가 비어있으면
				result = -1;	// -1 출력
				cout << result << endl;
			}
			else {
				result = q.front();	// 아니라면, front값 출력
				cout << result << endl;
			}
		}

		// 6. back
		else if (command == "back") {
			if (q.size() == 0) {	// 큐가 비어있으면
				result = -1;	// -1 출력
				cout << result << endl;
			}
			else {
				result = q.back();	// 아니라면, back값 출력
				cout << result << endl;
			}
		}
	}

	return 0;
}

명령어의 개수(N)를 입력받은 후, N만큼 for문을 반복한다.

for문 안에는 각각의 큐의 함수들이 구현되어있으며,

명령어(command)가 무엇이냐에 따라 다른 작업을 수행한다.

 

1. push의 경우, 원소를 하나 더 입력받아 해당 원소를 큐에 삽입한다.

2. pop의 경우, 큐가 비어있으면 -1을 반환하고 그렇지 않으면 front를 반환 후, pop해주었다.

3. size는 큐의 사이즈를 바로 출력해주었고,

4. empty는 size함수를 이용해, 큐가 비어있으면 1, 아니면 0을 출력하도록 했다.

5. front, 6.back 또한 큐가 비어있으면 -1을 출력하고, 그렇지 않으면 각각의 값을 출력했다.

 

 


그냥 내장 함수를 이용해 큐를 구현해주면 되는 간단한 문제였다.

주말이니까.. 쉬운걸로 골라보았다..

한 주를 또 보냈으니, 일요일 하루 푹 쉬고 다음주부터는 다시 화이팅해야지😊

 

 

728x90
반응형