문제출처: https://www.acmicpc.net/problem/10828


풀이

전형적인 스택 구현 문제입니다. 스택의 개념을 공부하고 이 문제로 복습하면 좋을 것 같습니다.

본 풀이는 c언어스타일로 구현하였고 9012번문제https://www.acmicpc.net/problem/9012는 c++로 구현했습니다.


코드

#pragma warning (disable:4996)
#include<cstdio>
#include<cstring>
#define STACK_SIZE 10000
int stack[STACK_SIZE];
int top = -1;
void push(int num);
int is_full();
int is_empty();
int pop();
int count();
int peek();
int main()
{
	int n;
	scanf("%d", &n);
	int num;
	char choice[6];
	for (int i = 0; i < n; i++)
	{
		scanf("%s", choice);
		if (!strcmp(choice, "push"))
		{
			scanf("%d", &num);
			push(num);
		}
		else if (!strcmp(choice, "pop")) {
			if (top == -1)
				printf("-1\n");
			else
			{
				printf("%d\n", pop());
			}
		}
		else if (!strcmp(choice, "size"))
		{
			printf("%d\n", count());
		}
		else if (!strcmp(choice, "empty"))
		{
			printf("%d\n", is_empty());
		}
		else if (!strcmp(choice, "top"))
		{
			printf("%d\n", peek());
		}
	}
}
void push(int num)
{
	if (is_full())
		return;
	else stack[++top] = num;
}
int is_full()
{
	if (top == STACK_SIZE - 1)
		return 1;
	else return 0;
}
int is_empty()
{
	if (top == -1)
		return 1;
	else return 0;
}
int pop()
{
	if (is_empty())
		return -1;
	else return stack[top--];
}
int count()
{

	if (is_empty())
		return 0;
	else
	{
		return top + 1;
	}
}
int peek()
{
	if (is_empty())
		return -1;
	else return stack[top];
}


결과


'문제풀이(BOJ) > 스택' 카테고리의 다른 글

[백준 11899] 괄호 끼워넣기  (0) 2020.01.08
[백준 3986] 좋은 단어  (0) 2019.12.08
[백준 9012] 괄호  (0) 2019.12.03

+ Recent posts