有希
백준 10773/제로 본문
처음에는 벡터를 이용해서 0이 아니면 벡터에 넣고 0이면 개수를 센 뒤,
벡터사이즈 - 0의 개수만큼만 벡터에서 더하면 되겠지 하고 생각했었다.
문제는 가장 처음에 0 이 올 경우이다. 문제에서 주어진 3 0 4 0 케이스를 약간 비꼬아서 0 0 3 4 일 경우에 위에처럼 알고리즘을 짜게 되면 vec사이즈는 2, 0의 개수도 2가 되어 0을 출력하게 된다.
고로 stl중 stack을 이용하여 푸는게 가장 보편적이고 좋은 풀이이다. 홍대병을 버리면 되는 문제.
#include <iostream>
#include <stack>
using namespace std;
int main() {
stack<int> s;
int n;
cin >> n;
for(int i=0; i<n; ++i) {
int a;
cin >> a;
if(a==0) s.pop();
else s.push(a);
}
int ret = 0;
while(!s.empty()) {
ret += s.top();
s.pop();
}
cout << ret << endl;
return 0;
}
'프로그래밍 > 알고리즘+코딩테스트' 카테고리의 다른 글
백준 2442/ 별 찍기 - 5 (0) | 2022.08.07 |
---|---|
백준 11719/그대로 출력하기 2 (0) | 2022.08.03 |
백준 2941/크로아티아 알파벳 (0) | 2022.07.16 |
HackerRank/Subarray Division (0) | 2022.05.08 |
HackerRank/Between Two Sets (0) | 2022.05.03 |