문제: https://www.acmicpc.net/problem/10773
#include <iostream>
#include <stack>
using namespace std;
stack<int> money;
int k;
int n;
int total;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> k;
for (int i = 0; i < k; i++) {
cin >> n;
(n == 0) ? money.pop() : money.push(n);
}
n = money.size();
for (int i = 0; i < n; i++) {
total += money.top();
money.pop();
}
cout << total;
}
수열을 입력받는데 0을 입력받으면 가장 최근의 수를 지워야 한다. 때문에 스택을 사용해서 문제를 해결할 수 있다.
숫자를 하나 입력받을 때마다 0인지 참 거짓을 판별해서 0이면 pop, 0이 아니면 push 연산을 수행했다.
k번째 입력을 모두 완료하면 스택에 남은 값들을 모두 더해야한다.
따라서 스택 top의 값을 total에 저장한 후에 pop하면서 스택이 empty가 될 때까지 반복했다.
'알고리즘' 카테고리의 다른 글
[BOJ] 10845: 큐 (0) | 2022.09.28 |
---|---|
[BOJ] 1874: 스택 수열 (1) | 2022.09.28 |
[BOJ] 10828: 스택 (0) | 2022.09.28 |
[BOJ] 1158: 요세푸스 문제 (0) | 2022.09.28 |
[BOJ] 5397: 키로거 (0) | 2022.09.28 |