작성일 :

문제 링크

10845번 - 큐

설명

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

문제 이해

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

  1. push X: 정수 X를 큐에 넣습니다.
  2. pop: 큐에서 가장 앞에 있는 정수를 빼고 출력합니다. 큐가 비어있으면 -1을 출력합니다.
  3. size: 큐에 들어있는 정수의 개수를 출력합니다.
  4. empty: 큐가 비어있으면 1, 아니면 0을 출력합니다.
  5. front: 큐의 가장 앞에 있는 정수를 출력합니다. 큐가 비어있으면 -1을 출력합니다.
  6. back: 큐의 가장 뒤에 있는 정수를 출력합니다. 큐가 비어있으면 -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
48
49
50
using System.Text;

namespace Solution {
  class MyQueue {
    private int[] data;
    private int front;
    private int back;

    public MyQueue(int size) {
      data = new int[size];
      front = 0;
      back = 0;
    }

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

    public int Pop() => front == back ? -1 : data[front++];

    public int Size() => back - front;

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

    public int Front() => front == back ? -1 : data[front];

    public int Back() => front == back ? -1 : data[back - 1];
  }

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

      var sb = new StringBuilder();

      var n = int.Parse(Console.ReadLine()!);
      var queue = new MyQueue(n);
      for (int i = 0; i < n; i++) {
        var input = Console.ReadLine()!.Split();
        var cmd = input[0];

        if (cmd == "push") queue.Push(int.Parse(input[1]));
        else if (cmd == "pop") sb.AppendLine(queue.Pop().ToString());
        else if (cmd == "size") sb.AppendLine(queue.Size().ToString());
        else if (cmd == "empty") sb.AppendLine(queue.Empty().ToString());
        else if (cmd == "front") sb.AppendLine(queue.Front().ToString());
        else if (cmd == "back") sb.AppendLine(queue.Back().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
52
53
54
55
56
57
58
59
60
#include <bits/stdc++.h>
#define MAX 10001

using namespace std;

class MyQueue {
  int data[MAX];
  int front;
  int back;

  public:
    MyQueue() {
      front = 0;
      back = 0;
    }

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

    int pop() {
      if (front == back) return -1;
      return data[front++];
    }

    int size() { return back - front; }

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

    int getFront() {
      if (front == back) return -1;
      return data[front];
    }

    int getBack() {
      if (front == back) return -1;
      return data[back - 1];
    }
};

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

  int n; cin >> n;

  MyQueue queue;
  for (int i = 0; i < n; i++) {
    string cmd; cin >> cmd;

    if (cmd == "push") {
      int num; cin >> num;
      queue.push(num);
    } else if (cmd == "pop")  cout << queue.pop() << "\n";
    else if (cmd == "size")  cout << queue.size() << "\n";
    else if (cmd == "empty")  cout << queue.empty() << "\n";
    else if (cmd == "front") cout << queue.getFront() << "\n";
    else if (cmd == "back") cout << queue.getBack() << "\n";
  }

  return 0;
}