스택 함수 구현하기2

exsoul·2022년 6월 15일
0
post-thumbnail

문제 설명


다음 명령을 처리하기 위한 스택 함수를 구현하시오.

주어진 명령은 다음의 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;
}
profile
ocho

0개의 댓글