백준 10773 : 제로
문제 링크
https://www.acmicpc.net/problem/10773
문제 내용
(요약) 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 - 1) return;
stack[++top] = data;
}
void pop() {
if (top < 0) return;
stack[top--] = 0;
}
int main() {
int K, data, sum = 0;
scanf("%d", &K);
//데이터 입력
while (K--) {
scanf("%d", &data);
if (data == 0) pop();
else push(data);
}
//최종 합 구하기
for (int i = 0; i <= top; i++)
sum += stack[i];
printf("%d\n", sum);
return 0;
}
|
cs |
'백준 Baekjoon' 카테고리의 다른 글
[C언어] 백준 1475 : 방 번호 (0) | 2020.07.27 |
---|---|
[C언어] 백준 1912 : 연속합 (0) | 2020.07.27 |
[C언어] 백준 1978 : 소수 찾기 (0) | 2020.07.24 |
[C언어] 백준 4949 : 균형잡힌 세상 (3) | 2020.07.24 |
[JAVA] 백준 4228 : The Dragon of Loowater (0) | 2020.07.23 |