💡문제 분석 요약

정수를 저장하는 스택을 배열로 구현하기

push, pop, size, empty, top등 명령에 따라 스택의 배열을 입력받기.

💡알고리즘 설계

배열을 사용하여 스택을 구현, n은 10,000미만이라 배열 크기 10,000로 설정. 다른 명령어와 다르게 push를 사용할때는 숫자도 입력받아야함.

strcmp를 사용해서 명령어를 구분

push x 스택에 x를 넣는 명령 > 스택에 값을 추가하고 top 증가

스택의 가장 위에 값 top을 출력하는 명령 >초기엔 아무것도 저장되어있지 않으므로 top=-1로 선언.

스택이 비어있으면 empty 1, 아니면 0을 구현하는 명령 > return (top==-1)로 부울값으로 구현

size 스택의 정수 개수 출력하는 명령 > 아무것도 없는 상태가 top=-1 이라 top+1이 정수의 개수.

pop 가장 위의 정수를 뺴고 그 수 출력하는 명령 >top이 0이상이면 stack[top—]

💡코드

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

#define STACK_SIZE 100

int stack[STACK_SIZE] = {0};
int top = -1; // 스택의 가장 위를 가리키는 인덱스

void push(int x);
int pop(void);
int getSize(void);
int isEmpty(void);
int topElement(void);

int main(void)
{
    int n, x;
    char command[10];

    scanf("%d", &n); // 명령의 수 입력받기

    for (int i = 0; i < n; i++)
    {
        scanf("%s", command); // 명령어 입력받기

        if (strcmp(command, "push") == 0)
        {
            scanf("%d", &x); // push 명령어의 경우 숫자도 입력받기
            push(x);
        }
        else if (strcmp(command, "pop") == 0)
        {
            printf("%d\\n", pop());
        }
        else if (strcmp(command, "size") == 0)
        {
            printf("%d\\n", getSize());
        }
        else if (strcmp(command, "empty") == 0)
        {
            printf("%d\\n", isEmpty());
        }
        else if (strcmp(command, "top") == 0)
        {
            printf("%d\\n", topElement());
        }
    }

    return 0;
}

void push(int x)
{
    if (top < STACK_SIZE - 1) // 스택 오버플로우 방지
    {
        stack[++top] = x; // 스택에 값을 추가하고 top 증가
    }
    else
    {
        printf("Stack overflow\\n");
    }
}

int pop(void)
{
    if (top >= 0)
    {
        return stack[top--]; // 스택에서 값을 꺼내고 top 감소
    }
    else
    {
        return -1; // 스택이 비어있으면 -1 반환
    }
}

int getSize(void)
{
    return top + 1; // 스택의 크기 반환
}

int isEmpty(void)
{
    return (top == -1); // 스택이 비어있으면 1, 아니면 0 반환
}

int topElement(void)
{
    if (top >= 0)
    {
        return stack[top]; // 스택의 최상위 요소 반환
    }
    else
    {
        return -1; // 스택이 비어있으면 -1 반환
    }
}

💡시간복잡도