
숫자를 받고 0을 받으면 이전에 있는 수를 지우고 남은 수를 합하는 문제이다.
이전 숫자를 기억하면서 더하다가 0이 나오면 이전숫자를 빼는 방법도 있겠지만
나는 그냥 stack으로 풀었다.
0이 아니면 stack에 넣고 0이면 넣은 숫자를 pop한 뒤 stack에 남아있는 수의 합을 구했다.
결과는 통과긴 하다!
#include <iostream>
#include <vector>
#include <algorithm>
#include <stack>
using namespace std;
int main() {
int n;
cin >> n;
stack<int> s;
for (int i = 0; i < n; i++) {
int k;
cin >> k;
if (k == 0) {
s.pop();
}
else {
s.push(k);
}
}
int size_ = s.size();
int ans = 0;
for (int i = 0; i < size_; i++) {
ans += s.top();
s.pop();
}
cout << ans;
return 0;
}
'코딩테스트' 카테고리의 다른 글
| 프로그래머스 신규 아이디 추천 (1) | 2021.04.20 |
|---|---|
| 프로그래머스 크레인 인형 뽑기 (0) | 2021.04.20 |
| 백준 1110 더하기 사이클 (0) | 2021.04.19 |
| 백준 2993 세부분 (0) | 2021.04.15 |
| 백준 20055 컨베이어 벨트위의 로봇 (구현) (1) | 2021.04.14 |
댓글