반응형

문제 출처 :


https://www.acmicpc.net/problem/10773


알고리즘 분석 :


문제 해결에 필요한 사항

1. 0이 있을 때와 없을 때의 판별

2. 스택 


이 문제를 보고 스택임을 파악한다면 쉽게 문제를 해결 해 낼 수 있을 것이다.


스택 또한 #include <stack>로 제공되므로 이용을 하면 조금 더 간결한 코딩을 할 수 있을 것이다.


tmp == 0 ? T.pop() : T.push(tmp);의 해석은


cin(scanf)로 tmp에 받아낸 값이 0이면 값을 하나 pop하고, 0이 아니면 tmp에 있던 값을 push하라는 뜻이다.


pop()는 void형이기에 stack의 가장 위의 값을 받아내기 위해서는 top()를 써서 받아내야 한다.


소스 코드 : 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <stack>
 
using namespace std;
 
int main()
{
    stack <int>T;
    int n;
    int tmp, sum = 0;
 
    cin >> n;
 
    for (int i = 0; i < n; i++)
    {
        cin >> tmp;
        
        tmp == ? T.pop() : T.push(tmp);
    }
 
    for (; T.empty() == 0;)
    {
        int get = T.top();
        T.pop();
 
        sum = sum + get;        
    }
 
    cout << sum;
    
    return 0;
}
 
//                                                        This source code Copyright is Crocus 
//                                             Do you want to see more contents? click here >>
Crocus


반응형