https://www.acmicpc.net/problem/10828
문제
정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 다섯 가지이다.
- push X: 정수 X를 스택에 넣는 연산이다.
- pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- size: 스택에 들어있는 정수의 개수를 출력한다.
- empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
- top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
입력
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.
출력
출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.
코드
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int stack[10000];
int sp=0;
void push(int n){
stack[sp]=n;
sp++;
}
void pop(){
if(sp>0){
cout<<stack[sp-1]<<'\n';
sp--;
} else cout<<-1<<'\n';
}
void size(){
cout<<sp<<'\n';
}
void empty(){
if(sp==0) cout<<1<<'\n';
else cout<<0<<'\n';
}
void top(){
if(sp==0) cout<<-1<<'\n';
else cout<<stack[sp-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]=="top") top();
}
}
728x90
'알고리즘 > 백준' 카테고리의 다른 글
백준 10799번: 쇠막대기 (0) | 2020.01.23 |
---|---|
백준 9012번: 괄호 (0) | 2020.01.23 |
백준 11004번: K번째 수 (0) | 2020.01.23 |
백준 11652번: 카드 (0) | 2020.01.23 |
백준 10989번: 수 정렬하기 3 (0) | 2020.01.23 |