백준 - 스택 구현 (10828)

백준 스택 구현 문제 - 10828

배열로 풀기

 #include<stdio.h>
#include<string.h>
int main(void){
    int N = 0;
    
    unsigned int size = 0;
    int stack[10000] = {0};
    char cmd[6] = {0};
    int item = 0;
    
    scanf("%d\n",&N);
    for(int i =0; i<N; i++){
        scanf("%s",cmd);
        //pop
        if(strcmp(cmd, "pop") == 0){
            if(size == 0){
                printf("-1\n");
                continue;
            }
            printf("%d\n",stack[size-1]);
            size--;
        }
        
        //push
        else if(strcmp(cmd, "push") == 0){
            scanf("%d\n", &item);
            stack[size] = item;
            size++;
        }
        
        //top
        else if(strcmp(cmd, "top") == 0){
            if(size == 0){
                printf("-1\n");
                continue;
            }
            printf("%d\n",stack[size-1]);
        }
        
        //empty
        else if(strcmp(cmd, "empty") == 0){
            printf("%d\n", size == 0); // 스택이 비어있으면 1, 아니면 0을 출력한다.
        }
        else{
            printf("%d\n",size);
        }
    }
    return 0;
}


구조체에 배열을 넣어서 풀기

#include<stdio.h>
#include<string.h>

#define MAX_STACK_SIZE 100
typedef int element;
typedef struct {
    element stack[MAX_STACK_SIZE];
    int top;
}StackType;

// 스택 초기화 함수
void init(StackType *s){
    s->top = -1;
}

//empty
int is_empty(StackType *s)
{
    return (s->top == -1);
}

// full
int is_full(StackType *s)
{
    return (s->top ==(MAX_STACK_SIZE-1));
}

// push
void push(StackType *s,element item){
    if(is_full(s))
    {
        fprintf(stderr,"스택 포화 에러\n");
        return;
    }
    else s->stack[++(s->top)] = item;
    //top 증가를 먼저 시켜준뒤 인자로 넘겨준다
}

// delete 함수
element pop(StackType *s)
{
    if(is_empty(s)){
        fprintf(stderr,"스택 공백 에러\n");
        exit(1);
    }
    else return s->stack[(s->top)--];
    //인자로 넘겨준 뒤 감소
}
//size
int size(StackType *s){
    return s->top +1;
}


// peek함수
element peek(StackType *s)
{
    if(is_empty(s)){
        fprintf(stderr,"스택 공백 에러\n");
        exit(1);
    }
    else return s->stack[s->top];
}

int main(void){
    StackType s;
    init(&s);
    
    int i ;
    char str[6];
    
    int n, num;
    scanf("%d", &n);
    
    for(i=0; i<n; i++){
    scanf("%s",str);
        if(!strcmp(str,"push")) // strcmp 같으면 0 반환
        {
            scanf("%d",&num);
            push(&s,num);
        }else if(!strcmp(str,"pop")){
            printf("%d\n",pop(&s));
        }else if(!strcmp(str,"empty")){
            printf("%d\n",is_empty(&s));
        }else if(!strcmp(str,"size")){
            printf("%d\n",size(&s));
        }else if(!strcmp(str,"top")){
            printf("%d\n",peek(&s));
        }
    }
    return 0;
}


참고자료

[백준 온라인 코딩 스터디] (https://www.acmicpc.net/)

스택 -> 배열로 푼 블로그

https://jaejin0me.github.io/post/algo32/

http://jwprogramming.tistory.com/141

0%