온라인저지
[BOJ] 10828번: 스택
plzfday
2018. 7. 26. 18:38
https://www.acmicpc.net/problem/10828
6달 전에 짠 코드는 4ms가 나왔는데 똑같은 코드로 이틀 전에 제출했더니 0ms가 나왔다. ㅋㅋㅋ 재미있네
이런 문제는 사실 N의 제한이 있기 때문에 굳이 링크드 리스트로 구현할 필요는 없다.
그리고 문자열을 다 볼 필요 없이 앞 1~2자리만 봐도 어떤 입력인지 알 수 있다.
#include <stdio.h>
#include <string.h>
#define MAX 10001
typedef struct stack
{
int Stack[MAX];
int size;
int empty;
int top;
} stack;
stack Stk;
int main()
{
Stk.empty = 1, Stk.size = 0;
int N;
scanf("%d", &N);
for (int i = 1; i <= N; ++i)
{
char str[10];
scanf("%s", str);
switch (str[0])
{
case 'p':
if (str[1] == 'u')
{
int input;
scanf("%d", &input);
Stk.Stack[Stk.size] = input;
Stk.top = input;
Stk.empty = 0;
Stk.size++;
}
else
{
if (Stk.size != 0)
{
int top = Stk.Stack[Stk.size - 1];
Stk.Stack[Stk.size - 1] = 0;
Stk.size--;
Stk.top = Stk.Stack[Stk.size - 1];
printf("%d\n", top);
break;
}
else
{
Stk.empty = 1;
printf("%d\n", -1);
break;
}
}
break;
case 't':
printf("%d\n", (Stk.size <= 0) ? -1 : Stk.top);
break;
case 's':
printf("%d\n", Stk.size);
break;
case 'e':
printf("%d\n", Stk.size <= 0 ? 1 : 0);
break;
}
}
return 0;
}