작성일 :

문제 링크

10828번 - 스택

설명

정수를 저장하는 스택(Stack)을 구현하고 다양한 명령을 처리하는 문제입니다.

문제 이해

다음 5가지 명령을 처리해야 합니다:

  1. push X: 정수 X를 스택에 넣습니다.
  2. pop: 스택의 가장 위에 있는 정수를 빼고 출력합니다. 스택이 비어있으면 -1을 출력합니다.
  3. size: 스택에 들어있는 정수의 개수를 출력합니다.
  4. empty: 스택이 비어있으면 1, 아니면 0을 출력합니다.
  5. top: 스택의 가장 위에 있는 정수를 출력합니다. 스택이 비어있으면 -1을 출력합니다.


간단하게 배열을 이용하여 스택을 구현해봅니다.


Code

[ C# ]

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
using System.Text;

namespace Solution {

  class MyStack {

    private int[] data;
    private int idx;

    public MyStack(int size) {
      data = new int[size];
      idx = 0;
    }

    public void Push(int value) => data[idx++] = value;

    public int Pop() => idx == 0 ? -1 : data[--idx];

    public int Size() => idx;

    public int Empty() => idx == 0 ? 1 : 0;

    public int Top() => idx == 0 ? -1 : data[idx - 1];
  }

  class Program {
    static void Main(string[] args) {

      var n = int.Parse(Console.ReadLine()!);

      var stack = new MyStack(n);
      var sb = new StringBuilder();
      for (int i = 0; i < n; i++) {
        var input = Console.ReadLine()!.Split();
        var cmd = input[0];

        if (cmd == "push") stack.Push(int.Parse(input[1]));
        else if (cmd == "pop") sb.AppendLine(stack.Pop().ToString());
        else if (cmd == "size") sb.AppendLine(stack.Size().ToString());
        else if (cmd == "empty") sb.AppendLine(stack.Empty().ToString());
        else if (cmd == "top") sb.AppendLine(stack.Top().ToString());
      }

      Console.Write(sb);
    }
  }
}



[ C++ ]

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
#include <bits/stdc++.h>
#define MAX 10001

using namespace std;

class MyStack {

  int data[MAX];
  int idx;

  public:
    MyStack() { idx = 0; }

    void push(int value) { data[idx++] = value; }

    int pop() {
      if (idx == 0) return -1;
      return data[--idx];
    }

    int size() { return idx; }

    int empty() { return idx == 0 ? 1 : 0; }

    int top() {
      if (idx == 0) return -1;
      return data[idx - 1];
    }
};

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  int t; cin >> t;

  MyStack stack;
  for (int i = 0; i < t; i++) {
    string cmd; cin >> cmd;

    if (cmd == "push") {
      int num; cin >> num;
      stack.push(num);
    } else if (cmd == "pop") cout << stack.pop() << "\n";
    else if (cmd == "size") cout << stack.size() << "\n";
    else if (cmd == "empty") cout << stack.empty() << "\n";
    else if (cmd == "top") cout << stack.top() << "\n";
  }

  return 0;
}