문제 설명
다음 명령을 처리하기 위한 스택 함수를 구현하시오.
주어진 명령은 다음의 3가지이다.
1. "1 a"는 a라는 수를 스택에 넣는다. 이때, a는 10,000 이하의 자연수이다.
2. "0"는 스택에서 데이터를 빼고, 그 데이터를 출력한다. 만약 스택이 비어있으면, "E"를 출력한다.
3. "2"는 스택에 쌓여있는 데이터의 수를 출력한다.C++의 stack class member functions과 유사한 기능을 하는 아래 함수를 구현하시오
입력 설명
첫 줄에 N이 주어진다. N은 주어지는 명령의 수이다. (1≤N≤10,000)
둘째 줄부터 N+1줄까지 N개의 명령이 주어지는데, 한 줄에 하나씩 주어진다.
출력 설명
각 명령에 대한 출력 값을 한 줄에 하나씩 출력한다. 출력내용이 하나도 없는 경우는 주어지지 않는다.
입력 예시
7
1 7
1 5
2
0
0
0
2
출력 예시
2
5
7
E
0
#include <stdio.h>
#define MAXN ((int)1e4)
int N;//명령개수
int cmd[MAXN + 10];
int a[MAXN + 10];
int stk[MAXN + 10];
int sp;
void push(int d){
stk[++sp] = d;
}
void pop(void) {
sp--;
}
int top(void) {
return stk[sp];
}
int empty(void) {
return sp==0;
}
int size(void) {
return sp;
}
void Solve(void){
sp = 0;//초기화
for (int i=0; i<N; i++){
switch(cmd[i]){
case 0://읽고 제거
if (empty()) {
printf("E\n");
}
else{
printf("%d\n", top());
pop();
}
break;
case 1://저장
push(a[i]);
break;
default://2 : 저장 개수
printf("%d\n", size());
}
}
}
void InputData(void){
scanf("%d", &N);
for (int i=0; i<N; i++){
scanf("%d", &cmd[i]);
if (cmd[i] == 1){
scanf("%d", &a[i]);
}
}
}
int main(void){
InputData();
Solve();
return 0;
}