https://www.acmicpc.net/problem/10845
문제
정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 여섯 가지이다.
- push X: 정수 X를 큐에 넣는 연산이다.
- pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- size: 큐에 들어있는 정수의 개수를 출력한다.
- empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
- front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
입력
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.
출력
출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.
코드
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int queue[10000];
int f=0;
int r=0;
void push(int n){
queue[r]=n;
r++;
}
void pop(){
if(f!=r){
cout<<queue[f]<<'\n';
f++;
} else cout<<-1<<'\n';
}
void size(){
cout<<r-f<<'\n';
}
void empty(){
if(r==f) cout<<1<<'\n';
else cout<<0<<'\n';
}
void front(){
if(f!=r) cout<<queue[f]<<'\n';
else cout<<-1<<'\n';
}
void back(){
if(f!=r) cout<<queue[r-1]<<'\n';
else cout<<-1<<'\n';
}
int main(void){
ios_base::sync_with_stdio(false);
int n;
cin>>n;
string s[10001];
int num;
for(int i=1; i<=n+1; i++)
getline(cin, s[i]);
for(int i=1; i<=n+1; i++){
if(strncmp(s[i].c_str(), "push", 4)==0) {
s[i].erase(0, 5);
push(stoi(s[i]));
}
if(s[i]=="pop") pop();
if(s[i]=="size") size();
if(s[i]=="empty") empty();
if(s[i]=="front") front();
if(s[i]=="back") back();
}
}
728x90
'알고리즘 > 백준' 카테고리의 다른 글
백준 10808번: 알파벳 개수 (0) | 2020.03.16 |
---|---|
백준 10866번: 덱 (0) | 2020.01.23 |
백준 10799번: 쇠막대기 (0) | 2020.01.23 |
백준 9012번: 괄호 (0) | 2020.01.23 |
백준 10828번: 스택 (0) | 2020.01.23 |