C, C++ 문제풀이
SW Expert Academy 8931. 제로
륵기
2020. 4. 7. 23:20
728x90
반응형
문제 링크 :
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
반응형