기록

[백준/C] 10828번 스택 본문

잡동사니/[2022] 회로이론

[백준/C] 10828번 스택

heylo 2022. 12. 11. 02:30

https://www.acmicpc.net/problem/10828

 

10828번: 스택

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net

 

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#define MAX_STACK_SIZE 100001
typedef struct element {
	int key;
}element;

int top = -1;
element stack[MAX_STACK_SIZE];

void push(element item) {
	stack[++top]= item;
}
element pop(void) {
	if (top == -1) printf("-1\n");
	else {
		printf("%d\n", stack[top--].key);
		return stack[top];
	}
}
void empty(void) {
	if (top == -1) printf("1\n");
	else printf("0\n");
}
void topPrint(void) {
	if (top == -1) printf("-1\n");
	else printf("%d\n", stack[top].key);
}
void size(void) {
	printf("%d\n", top + 1);
}

int main(void)
{
	int n, pushNum; // 명령어 개수, push 할 숫자
	element item; // push 할 element
	int i; // 반복 개수
	char order[10];

	scanf("%d", &n);
	for (i = 0; i < n; i++)
	{
		scanf("%s", order);
		if (!strcmp("push", order)){
			scanf("%d", &pushNum);
			item.key = pushNum;
			push(item);
		}

		if (!strcmp("pop", order)){
			pop();
		}

		if (!strcmp("empty", order)){
			empty();
		}

		if (!strcmp("top", order)){
			topPrint();
		}

		if (!strcmp("size", order)){
			size();
		}

	}
	return 0;
}