rueki

SW Expert Academy 8931. 제로 본문

C, C++ 문제풀이

SW Expert Academy 8931. 제로

륵기 2020. 4. 7. 23:20
728x90
반응형

문제 링크 :

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AW5jBWLq7jwDFATQ&categoryId=AW5jBWLq7jwDFATQ&categoryType=CODE

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

 

여기서는 스택의 개념을 이해하고 있다면 매우 쉬울 문제이다.

0이 입력됬을 때는 pop을 하고 그 외의 숫자 입력 시 push를 하는 개념을 이해하고,

Last in, First out의 개념도 인지하고 있으면 풀기 쉽다.

<stack> 을 선언해서 쉽게 풀 수 있었다.

 

#include <iostream>
#include <string>
#include <stack>
using namespace std;
int main()
{
 int T;
 int num;
 stack<int> s;
 cin>>T;
 for(int i=0;i<T;i++)
 {  
    int sum = 0;
    int temp = 0;
    cin>>num;
    for(int j=0;j<num;j++)
    {
        int n;
        cin>>n;
        if(n != 0){
            s.push(n);
            // 0이 아닌 숫자가 들어왔을 때 스택에 push
        }
        else{
        // 0이 들어왔을 때, 스택이 비어있지 않으면 안에 값 pop시킨다.
            if(!s.empty()){
            s.pop();
            }
         
        }
     
    }
    
     /*
    if(s.empty()){
        cout<<'#'<<i+1<<' '<<0<<'\n';
    }
    else{
        for(int k=0;k<=s.size();k++){
            temp = s.top();
            sum += temp;
            s.pop();
        }
        */
     
     //스택이 비어질때까지 맨 위의 숫자를 sum에 더하고 pop을 반복한다.
     // 애초에 스택이 빈상태이면 sum은 0을 반환할 것이다.
     while(!s.empty())
     {
        sum += s.top();
         s.pop();
     }
         
        cout<<'#'<<i+1<<' '<<sum<<'\n';  
    }
  
     
    return 0;
}
728x90
반응형
Comments