관리 메뉴

有希

백준 10773/제로 본문

프로그래밍/알고리즘+코딩테스트

백준 10773/제로

有希. 2022. 8. 3. 02:33

처음에는 벡터를 이용해서 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;
}