본문 바로가기
[백준]

[BaekJoon/백준] 10828 스택 구현

by Hevton 2021. 3. 5.
반응형

오랜만에 스택 구현이라 어버버댔다.

 

한가지를 느꼈다.

C언어에서 정말.. 문자열 다루는 것은 복잡하다ㅜㅜ 자바가 정말 편해.. C언어에서 문자열 못다루는 내자신이 초라했다.

 

 

그리고 한가지 실수를 했다.

예제로 입력받는 커맨드 중 가장 긴 것이 "empty"인데, 이것을 받기 위한 배열의 최소 길이는 6인데(e m p t y \0)

5로 설정했다가 실행 오류를 한동안 못찾았다. 책에서 배운내용인데 까먹었다 ㅜㅜ

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

typedef struct {
    int *stk;
    int size; // 스택 포인터 = 스택에 쌓여있는 데이터의 개수
} IntStack;

int Push(IntStack *s, int x) {
    if(s->size > 10000)
        return -1;
    
    s->stk[s->size++] = x;
    
    return 0; // 성공
}

int Pop(IntStack *s, int *x) {
    if(s->size <= 0) {
        *x = -1;
        return -1;
    }
    
    *x = s->stk[--s->size];
    
    return 0; // 성공
}

int Size(IntStack *s) {
    
    return s->size;
}

int IsEmpty(IntStack *s) {
    
    return (s->size <= 0);
}

int Peek(IntStack *s, int *x) {
    
    if(s->size <= 0) {
        *x = -1;
        return -1;
    }
    
    *x = s->stk[s->size - 1];
    
    return 0; // 성공
}

int N;
char input[6];
int key;

int main() {
    
    IntStack stack;
    stack.stk = calloc(10000, sizeof(int));
    stack.size = 0;
    
    scanf("%d", &N);
    
    
    while(N--) {
    	// input배열 초기화해주는건데, 안해줘도 되더라.
        memset(input, '\0', sizeof(input));
         
        scanf("%s", input);
        
        //strcmp는 널문자까지 비교
        if(strcmp("push", input) == 0) {
            scanf("%d", &key);
            Push(&stack, key);
        }
        
        else if(strcmp("pop", input) == 0) {
            Pop(&stack, &key);
            printf("%d\n", key);
        }
        
        else if(strcmp("size", input) == 0) {
            printf("%d\n", Size(&stack));
        }

        else if(strcmp("empty", input) == 0) {
            printf("%d\n", IsEmpty(&stack));
        }
        
        else if(strcmp("top", input) == 0) {
            Peek(&stack, &key);
            printf("%d\n", key);
        }


        
        
    }
    
    
}

 

참조 : www.acmicpc.net/board/view/46288

반응형

'[백준]' 카테고리의 다른 글

[BaekJoon/백준] 9012번 스택 활용  (2) 2021.03.05
[BaekJoon/백준] 10773번 스택  (0) 2021.03.05
[BaekJoon/백준] 2004번  (0) 2021.03.04
백준 게시판 개인공지  (0) 2021.03.03
[BaekJoon/백준] 1676번  (0) 2021.03.03