백준 Baekjoon

[C언어] 백준 10773 : 제로

sujo 2020. 7. 27. 10:20

백준 10773 : 제로

 

문제 링크

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

 

10773번: 제로

문제 나코더 기장 재민이는 동아리 회식을 준비하기 위해서 장부를 관리하는 중이다. 재현이는 재민이를 도와서 돈을 관리하는 중인데, 애석하게도 항상 정신없는 재현이는 돈을 실수로 잘못 ��

www.acmicpc.net

 

 

문제 내용

(요약) 0에서 1,000,000 사이의 값을 입력받다가 정수가 "0"일 경우 가장 최근에 쓴 수를 지우고, 아닐 경우 해당 수를 쓴다. 최종적으로 남은 수의 합을 구한다.

 

 

Idea

0을 입력받은 경우 가장 최근의 수를 지워야 하므로 LIFO 형식이다. 이는 스택을 활용하면 쉽게 구현이 가능하다.

  • 0을 입력받으면 pop
  • 그 외 숫자 push

 

 

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>
#define MAX 100000
 
int stack[MAX];
int top = -1;
 
void push(int data) {
    if (top >= MAX - 1return;
    stack[++top] = data;
}
 
void pop() {
    if (top < 0return;
    stack[top--= 0;
}
 
int main() {
    int K, data, sum = 0;
    scanf("%d"&K);
 
    //데이터 입력
    while (K--) {
        scanf("%d"&data);
        if (data == 0pop();
        else push(data);
    }
 
    //최종 합 구하기
    for (int i = 0; i <= top; i++)
        sum += stack[i];
    printf("%d\n", sum);
    return 0;
}
cs