백준 알고리즘 - 10828번 스택 문제입니다.


(참고 - https://www.acmicpc.net/problem/10828 )



코드)

#include <stdio.h>

#include <string.h>

int stack[10000];

int main() {

int N, i, j, num, top=0;

scanf("%d", &N);

for(i=0; i<N; i++) {

char cmd[BUFSIZ];

scanf("%s", cmd);

if(strcmp(cmd, "push") == 0) {

scanf("%d", &num);

stack[top] = num;

top++;

}

if(strcmp(cmd, "pop") == 0) {

if(top <= 0)

printf("-1\n");

else {

printf("%d\n", stack[top-1]);

top--;

}

}

if(strcmp(cmd, "size") == 0) {

printf("%d\n", top);

}

if(strcmp(cmd, "empty") == 0) {

if(top <= 0)

printf("1\n");

else

printf("0\n");

}

if(strcmp(cmd, "top") == 0) {

if(top <= 0)

printf("-1\n");

else 

printf("%d\n", stack[top-1]);

}

}

return 0;

}


- 문제에 맞게 C로 스택함수를 직접 구현해주면 되는 부분입니다.

다른 부분은 생략하고, 각 명령부분들만 살펴보도록 하겠습니다.

먼저 입력받은 문자열 cmd가 PUSH인지 아닌지 파악하기 위해 문자열 비교함수인 strcmp를 이용하여 push와 비교를 하, push일 경우 숫자도 함께 입력받도록 하여 배열 stack의 인덱스 top에 넣어주고, top은 1 증가시켜줍니다.


입력받은 문자열이 POP이라면, top의 인덱스를 먼저 비교하여 0보다 작거나 같을 시에는 stack에 아무 값도 현재 들어가있지 않다는 것을 의미하므로 문제의 조건에 따라 -1을 출력하고, top이 0보다 클 경우 값이 있다는 것이므로 stack의 인덱스 top-1의 값을 출력한 뒤, top을 1 감소시켜줍니다.


입력받은 문자열이 size라면, top을 출력해줍니다.(인덱스 top이 곧 stack의 size를 가리키므로)


입력받은 문자열이 empty라면, top의 값을 비교하여 0 또는 1을 출력해줍니다.


입력받은 문자열이 top이라면, top의 값을 비교하여 0 또는 stack의 인덱스 top-1 (가장 위에 있는 값 = 가장 마지막에 push된 값)을 출력해줍니다.


WRITTEN BY
SiriusJ

,