백준(C언어)/23년 4월

[C] 백준 - 10828번: 스택

C0MPAS 2023. 4. 7. 14:18

4월 7일(금) - 스택 (10828번)

 

10828번: 스택

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

www.acmicpc.net

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

최초 생각 정리

- 작년에 배웠던 자료구조 강의를 참고해야겠다

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

문제점

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

풀이

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)

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

int number[100001];
int count = 0;

void push(int num)
{
	number[count] = num;
	count++;
}

void pop()
{
	if (count != 0)
	{
		count--;
		printf("%d\n", number[count]);
		number[count] = 0;
	}
	else
	{
		printf("%d\n", -1);
	}
}

void size()
{
	printf("%d\n", count);
}

void empty()
{
	if (count != 0)
	{
		printf("%d\n", 0);
	}
	else
	{
		printf("%d\n", 1);
	}
}

void top()
{
	if (count != 0)
	{
		printf("%d\n", number[count - 1]);
	}
	else
	{
		printf("%d\n", -1);
	}
}

int main(void)
{
	int N;
	scanf("%d", &N);

	char stack[10];
	for (int i = 0; i < N; i++)
	{
		scanf("%s", &stack);
		if (strcmp(stack, "push") == 0)
		{
			int num;
			scanf("%d", &num);
			push(num);
		}
		else if (strcmp(stack, "pop") == 0)
		{
			pop();
		}
		else if (strcmp(stack, "top") == 0)
		{
			top();
		}
		else if (strcmp(stack, "size") == 0)
		{
			size();
		}
		else if (strcmp(stack, "empty") == 0)
		{
			empty();
		}
	}

	return 0;
}

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ