문제풀이

BaekJoon(18258)::큐2

문제

 

18258번: 큐 2

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

www.acmicpc.net

문제파악

: 자료구조 'Queue'를 정확히 이해하고 해당 자료구조를 작성하고 요청하는 명령어를 작성할 수 있어야한다.

 

[명령어]

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

문제풀이

: 큐를 작성해주면 되지만, 큐는 제공하는 queue STL를 이용하겠다.

 

소스코드

#include <iostream>
#include <string>
#include <queue>
using namespace std;
int main() {
    cin.tie(NULL);
    cout.tie(NULL);
    ios_base::sync_with_stdio(false);
    
    queue<int> q;
    int t, num;
    string cmd;
    cin >> t;

    while (t--) {
        cin >> cmd;

        if (cmd == "push") {
            cin >> num;
            q.push(num);
        }
        else if (cmd == "pop") {
            if (q.empty()) {
                cout << "-1\n";
            }
            else {
                cout << q.front() << "\n";
                q.pop();
            }
        }
        else if (cmd == "front") {
            if(q.empty()){
                cout << "-1\n";
            }
            else {
                cout << q.front() << "\n";
            }
        }
        else if (cmd == "back") {
            if (q.empty()) {
                cout << "-1\n";
            }
            else {
                cout << q.back() << "\n";
            }
        }
        else if (cmd == "size") {
            cout << q.size() << "\n";
        }
        else if (cmd == "empty") {
            cout << q.empty() << "\n";
        }
    }

    
    return 0;
}

 

: 해당문제를 작성할때 시간초과를 주의해주어야한다. 일반적으로 입력과 출력이 많으니 다음 명령어를 tie와 sync를 해재해준다.

cout.tie(NULL);
cin.tie(NULL);
ios_base::sync_with_stdio(false);

: 추가로 개행문자 또한 endl보다는 '\n'을 이용하여 시간을 단축해주어야 시간초과 없이 통과가 가능하다.

'문제풀이' 카테고리의 다른 글

BaekJoon(2869)::달팽이는 올라가고 싶다  (0) 2021.07.19
BaekJoon(2292)::벌집  (0) 2021.07.19
BaekJoon(2839)::설탕 배달  (0) 2021.07.19
BaekJoon(2164)::카드2  (0) 2021.07.19
BaekJoon(1037)::약수  (0) 2021.07.18