[백준] 10845 큐 (C++)

백준 10845 큐 문제
백준 10845 큐 소스코드

📄 문제 설명

Problem

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

명령은 총 여섯 가지이다.

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

Input

첫째 줄 : 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)
다음 N개 줄 : 명령과 필요시에 정수
            (주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다.)

Output

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

Example Input 1

15
push 1
push 2
front
back
size
empty
pop
pop
pop
size
empty
pop
push 3
empty
front

Example Output 1

1
2
2
0
1
2
-1
0
1
-1
0
3

📝 문제 해설

▶ Queue (큐)
한쪽에서 데이터를 넣고 다른 한쪽에서 데이터가 빠지는 자료구조.
FIFO (First In First Out) 구조 : 가장 먼저 들어온 데이터가 가장 먼저 나간다.
Queue Reference
이 문제는 간단하게 STL Queue를 사용해 해결하면 된다.
pop()과 front() back() 명령 수행시 stack이 비었는지 확인해주는 절차만 추가하면
쉽게 문제를 해결할 수 있다.

</> Source Code

#include <bits/stdc++.h>

using namespace std;

int main() {

	queue<int> q;

	int n;
	scanf("%d", &n);

	for (int i = 0; i < n; i++) {
		string s;
		cin >> s;
		if (s == "push") {
			int x;
			scanf("%d", &x);
			q.push(x);
		}
		else if (s == "pop") {
			int front = -1;
			if (!q.empty()) {
				front = q.front();
				q.pop();
			}
			printf("%d\n", front);
		}
		else if (s == "size") {
			printf("%d\n", q.size());
		}
		else if (s == "empty") {
			int empty = 0;
			if (q.empty()) {
				empty = 1;
			}
			printf("%d\n", empty);
		}
		else if (s == "front") {
			int front = -1;
			if (!q.empty()) {
				front = q.front();
			}
			printf("%d\n", front);
		}
		else if (s == "back") {
			int back = -1;
			if (!q.empty()) {
				back = q.back();
			}
			printf("%d\n", back);
		}

	}
	return 0;
}

좋은 웹페이지 즐겨찾기