주소 : 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 |