프로그래밍/알고리즘

쉬운 스택 알고리즘 - C언어

량아이 2022. 9. 20. 00:10

처음 스택에 대해 배울때 스택이 무엇을 말하는 건지는 알겠으나 도대체 어떻게 써먹는지 이해가 되지 않았다.

현재 알고리즘 책 두 권을 가지고 있는데 이 책들에 써져있는 스택을 빡공 하려했으나 이 책들에선 처음엔 쉽게 스택은 이렇고 이런거다 LIFO(Last In First Out)방식이다 라고 아주 기초적인 설명하면서 정작 스택 코드를 설명할땐 갑자기 안써도될 구조체 나오고, 선행처리기 나오고, 사용자 정의 함수를 사용해서 엄청 복잡하게 설명하기에 바로 기가 팍 죽어서 스택이라는 함수가 있고 이 모든걸 다 외워야 한다는 생각에 빠지게 만들었으나. 공부를 하다가 유레카. 스택은 함수가 아닌 그저 풀이방식 즉 알고리즘의 일종이며 이건 그냥 내가 쓰기에 달렸다는 것을 깨달았다.

 

push 고 pop이고 그냥 다 필요없고 배열의 알고리즘이다.

 

이걸깨닫고 이걸 어떻게 풀어 하고 엄청 막막했던 백준 스택 문제도 바로 풀 수 있었다.

 

백준 10828: 스택

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main() {
    int a, top = -1, stack[10000], len,b;
    char q[200];
    scanf("%d", &a);
    while (a--) {
        scanf(" %[^\n]s", q);
        if (strncmp(q, "push", 4) == 0) {
            int cnt = 0;
            b = 0;
            len = strlen(q);
            for (int i = 5; i < len; i++) {
                b *= 10;
                b += q[i] - '0';
            }
            stack[++top] = b;
        }
        else if (strcmp(q, "pop") == 0) {
            if (top > -1) {
                printf("%d\n", stack[top--]);
            }
            else printf("-1\n");

        }
        else if (strcmp(q, "size") == 0) {
            printf("%d\n", top + 1);
        }
        else if (strcmp(q, "empty") == 0) {
            if (top == -1) printf("1\n");
            else printf("0\n");
        }
        else if (strcmp(q, "top") == 0) {
            if (top == -1) printf("-1\n");
            else printf("%d\n", stack[top]);
        }
    }
}

문제는 함수 이름으로 입력받는 방법을 알지 못한다.

언젠간 알아낼것이다.