본문 바로가기
백준/C

백준 10773번 : 제로 [C]

by 대니스 2022. 8. 17.

주소 : https://www.acmicpc.net/problem/10773

 

10773번: 제로

첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경

www.acmicpc.net

소스 코드 :

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define MAX_STACK_SIZE 100001

typedef int element;

typedef struct {
	int data[MAX_STACK_SIZE];
	int top;
}StackType;

init_stack(StackType* s)
{
	s->top = -1;
}

is_empty(StackType* s)
{
	if (s->top == -1)
		return 1;
	else return 0;
}

is_full(StackType* s)
{
	if (s->top == MAX_STACK_SIZE - 1)
		return 1;
	else return 0;
}

void push(StackType* s, int item)
{
	if (is_full(s))
	{
		return;
	}

	else return (s->data[++s->top] = item);
}

element pop(StackType* s)
{
	if (is_empty(s))
	{
		return;
	}

	else return (s->data[s->top--]);
}

element peek(StackType* s)
{
	if (is_empty(s))
	{
		return;
	}

	else return (s->data[s->top]);
}

int main()
{
	int circle, sum = 0;
	StackType s;
	init_stack(&s);
	scanf("%d", &circle);
	
	for (int i = 0;i < circle;i++)
	{
		int n = 0;
		scanf("%d", &n);
		if (n == 0)
		{
			pop(&s);
		}
		else push(&s, n);
	}

	for (int i = 0;i <= s.top;i++)
		sum += s.data[i];

	printf("%d", sum);
	return 0;
}

마무리 : 자료구조를 C로 배울 때 공부할 겸 풀었던 문제이다. 이 문제는 스택으로 입력을하면 push하며 0을 입력 받으면 pop하는 방식으로 문제를 풀면 된다. 그리고 스택에 남아있던 숫자들을 pop을 하여 더하면 답이 나온다.

'백준 > C' 카테고리의 다른 글

백준 10845번 : 큐 [C]  (0) 2022.08.18
백준 10828번 : 스택 [C]  (0) 2022.08.17
백준 2164번 : 카드2 [C]  (0) 2022.08.11
백준 1259번 : 팰린드롬수 [C]  (0) 2022.08.04
백준 15829번 : Hashing [C]  (0) 2022.08.03