본문 바로가기
Algorithm/c++

[c++/백준 10845] 큐

by 박다소니 2023. 1. 9.

문제
정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 여섯 가지이다.

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

 

접근

명령의 수를 입력받아 그만큼 반복문을 돌리며, 조건문을 이용하여 모든 명령에 대해 반응할 수 있도록 코드를 작성한다.

 

코드

#include <iostream>
#include <queue>
using namespace std;

int main(){
  cin.tie(NULL);
  ios_base::sync_with_stdio(false);
  queue<int> q;
  int n, num; cin >> n;
  string order;
  while(n--){
    cin >> order;
    if(order == "push"){
      cin >> num;
      q.push(num);
    }
    else if(order == "pop"){
      if(q.empty())
        cout << -1 << "\n";
      else{
        cout << q.front() << "\n";
        q.pop();
      }
    }
    else if(order == "size"){
      cout << q.size() << "\n";
    }
    else if(order == "empty"){
      if(q.empty())
        cout << 1 << "\n";
      else
        cout << 0 << "\n";
    }
    else if(order == "front"){
      if(q.empty())
        cout << -1 << "\n";
      else
        cout << q.front() << "\n";
    }
    else{
      if(q.empty())
        cout << -1 << "\n";
      else
        cout << q.back() << "\n";
    }
  }
}

풀이

정수를 저장하는 큐 q를 선언한다.

정수형 변수 n과 num을 선언하고 n에 명렬의 개수를 받는다.

명령을 입력받을 문자열형 변수 order을 선언한다.

n번만큼 while문을 돌리며 명령을 order에 입력받아 다음과 같이 명령에 따른 행동을 취하게 한다.

- push : 큐에 넣을 정수를 num에 입력받고 이를 q에 넣는다.

- pop : 큐가 비어있으면(empty함수를 이용하여 확인한다. empty함수는 비어있으면 true, 아니면 false를 리턴한다.) -1을 출력하고,

아니라면 제일 앞의 원소를 front 함수를 이용하여 출력한 뒤 pop 함수를 이용하여 제거한다.

- size : 큐의 크기를 size함수를 이용하여 출력한다.

- empty : empty 함수를 이용하여 확인하고 비어있으면 1을, 아니면 0을 출력한다.

- front : 큐가 비어있으면 -1을 출력하고, 아니라면 제일 앞의 원소를 front 함수를 이용하여 출력한다.

- back : 큐가 비어있으면 -1을 출력하고, 아니라면 제일 뒤의 원소를 back 함수를 이용하여 출력한다.

 

알아두자!

cin은 콘솔에서 입력을 받는데, 공백을 기준(줄 바꿈 기준 아님)으로 삼아 입력받는다.

큐(queue)는 컴퓨터의 기본적인 자료구조 중 하나로 FIFO 구조이다(first in first out. 선입선출). <queue> 헤더파일에 선언되어 있다.

'Algorithm > c++' 카테고리의 다른 글

[c++/백준 2164] 카드2  (0) 2023.01.10
[c++/백준 10828] 스택  (1) 2023.01.09
[c++/백준 10825] 국영수  (0) 2023.01.09
[c++/백준 10814] 나이순 정렬  (0) 2023.01.07
[c++/백준 11650] 좌표 정렬하기  (0) 2023.01.07