article thumbnail image
Published 2022. 9. 28. 17:08

문제: 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
복사했습니다!