https://www.acmicpc.net/problem/10866
문제
정수를 저장하는 덱(Deque)를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 여덟 가지이다.
- push_front X: 정수 X를 덱의 앞에 넣는다.
- push_back X: 정수 X를 덱의 뒤에 넣는다.
- pop_front: 덱의 가장 앞에 있는 수를 빼고, 그 수를 출력한다. 만약, 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- pop_back: 덱의 가장 뒤에 있는 수를 빼고, 그 수를 출력한다. 만약, 덱에 들어있는 정수가 없는 경우에는 -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 deque[10000];
int f=0; // 앞
int r=0; // 뒤
void push_front(int n){
for(int i=r-1; i>=0; i--) deque[i+1]=deque[i];
deque[f]=n;
r++;
}
void push_back(int n){
deque[r]=n;
r++;
}
void pop_front(){
if(f!=r){
cout<<deque[f]<<'\n';
f++;
} else cout<<-1<<'\n';
}
void pop_back(){
if(f!=r){
cout<<deque[r-1]<<'\n';
r--;
} 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<<deque[f]<<'\n';
else cout<<-1<<'\n';
}
void back(){
if(f!=r) cout<<deque[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_front", 10)==0) {
s[i].erase(0, 11);
push_front(stoi(s[i]));
}
if(strncmp(s[i].c_str(), "push_back", 9)==0) {
s[i].erase(0, 10);
push_back(stoi(s[i]));
}
if(s[i]=="pop_front") pop_front();
if(s[i]=="pop_back") pop_back();
if(s[i]=="size") size();
if(s[i]=="empty") empty();
if(s[i]=="front") front();
if(s[i]=="back") back();
}
}
728x90
'알고리즘 > 백준' 카테고리의 다른 글
백준 10809번: 알파벳 찾기 (0) | 2020.03.16 |
---|---|
백준 10808번: 알파벳 개수 (0) | 2020.03.16 |
백준 10845번: 큐 (0) | 2020.01.23 |
백준 10799번: 쇠막대기 (0) | 2020.01.23 |
백준 9012번: 괄호 (0) | 2020.01.23 |