백준 10845 큐 문제
백준 10845 큐 소스코드
📄 문제 설명
Problem
정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 여섯 가지이다.
- push X: 정수 X를 큐웨 넣는 연산
- pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력
(만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력)
- size: 큐에 들어있는 정수의 개수를 출력
- empty: 큐가 비어있으면 1, 아니면 0을 출력
- front: 큐의 가장 앞에 있는 정수를 출력
(만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력)
- back: 큐의 가장 뒤에 있는 정수를 출력
(만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력)
첫째 줄 : 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)
다음 N개 줄 : 명령과 필요시에 정수
(주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다.)
Output
출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.
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) 구조 : 가장 먼저 들어온 데이터가 가장 먼저 나간다.
이 문제는 간단하게 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;
}