728x90

0. 주어진 문제 

시간 제한메모리 제한제출정답맞은 사람정답 비율
1 초256 MB41069167051237640.884%

문제

정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.

명령은 총 다섯 가지이다.

  • push X: 정수 X를 스택에 넣는 연산이다.
  • pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • size: 스택에 들어있는 정수의 개수를 출력한다.
  • empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
  • top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.

입력

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.

출력

출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.




 1. 풀이


1) vector함수를 활용하면 쉽게 구현할 수 있을 것 같았다.

2) 허나 책에서 스택과 큐에 대해 배운 참에 구현을 해보았다.

3) 이왕 구현하는 김에 class를 나눠 구현하였다.

+) 처음에 class내부의 함수에 static을 넣어 선언하였는데 오류가 났었고, 동적 선언을 활용하려다가 그냥 최대 범위만큼 변수를 선언을 했었다.

이후에 동적으로 선언하는 것과 정적 선언의 차이가 어떻게 되는지 찾아봐야겠다.


+) 조금 찾아보니 c++에서 stack이 이미 구현되어있었다. 나중에 활용하자.




 2. 소스코드


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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include<iostream>
#include<string>
using namespace std;
 
class Stack {
private:
    int ptr=0;
    int stk[10050= { 0 };
 
public:
    void push(int x) {
        stk[ptr++= x;
    }
    void pop() {
        if (ptr <= 0)
            cout << "-1\n";
        else
            cout << stk[--ptr]<< "\n";
    }
    void size() {
        cout << ptr << "\n";
    }
    void empty() {
        if (ptr <= 0)
            cout << "1\n";
        else
            cout << "0\n";
    }
    void top() {
        if (ptr <= 0)
            cout << "-1\n";
        else
            cout << stk[ptr - 1<< "\n";
    }
};
 
 
 
int main() {
    int n, x,order;
    string a;
    Stack s;
    cin >> n;
    for (int i = 0;i < n;i++) {
        cin >> a;
        if (a == "push") order = 1;
        else if (a == "pop") order = 2;
        else if (a == "size") order = 3;
        else if (a == "empty") order = 4;
        else if (a == "top") order = 5;
 
        switch (order)
        {
        case 1:
            cin >> x;
            s.push(x);
            break;
 
        case 2:
            s.pop();
            break;
 
        case 3:
            s.size();
            break;
 
        case 4:
            s.empty();
            break;
 
        case 5:
            s.top();
            break;
        }
    }
 
    return 0;
}
 
 
cs


 3. 문제 출처


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


 4. 참고


http://www.cplusplus.com/reference/stack/stack/

+ Recent posts