티스토리 뷰

 

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

void push(int stack[], int number)
{
	int i = 0;

	if (stack[0] == 0) 
	{
		stack[0] = number;
	}
	else 
	{
		for(i = 9999; i >= 0; i--)
		{
			if(stack[i] != 0)
			{
				stack[i + 1] = stack[i];
			}
		}
		stack[0] = number;
	}
}

int pop(int stack[])
{
	int i = 0;
	int head = 0;

	if(stack[i] <= 0)
	{
		return -1;
	}
	else
	{
		head = stack[0];

		for (i = 1; i < 10000; i++)
		{
			
			if (stack[i] > 0)
			{
				stack[i - 1] = stack[i];
			}
			else
			{
				stack[i - 1] = 0;
				break;
			}
		}
	}

	return head;
}

int size(int stack[])
{
	int i = 0;

	for (i = 0; i < 10000; i++)
		if (stack[i] <= 0)
			break;

	return i;
}

int empty(int stack[])
{
	if(stack[0] > 0)
		return 0;
	else
		return 1;
}

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

int main()
{
	int stack[10000] = {0, };
	int input_cnt = 0;
	int i = 0;
	char command[6] = "";
	
	int number = 0;
	scanf("%d", &input_cnt);

	for (i = 0; i < input_cnt; i++)
	{
		scanf("%s", &command);

		if (!strcmp(command, "push"))
		{
			scanf("%d", &number);
			push(stack, number);
		}
		else if (!strcmp(command, "pop"))
		{
			printf("%d\n", pop(stack));
		}
		if (!strcmp(command, "size"))
		{
			printf("%d\n", size(stack));
		}
		if (!strcmp(command, "empty"))
		{
			printf("%d\n", empty(stack));
		}
		if (!strcmp(command, "top"))
		{
			printf("%d\n", top(stack));
		}
	}
	return 0;
}

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

 

10828번: 스택

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

www.acmicpc.net

그냥 답이지 정답은 아님

스택 구현 까먹었음!!

 

댓글
댓글쓰기 폼

티스토리 방명록