[백준/BOJ] 18258번: 큐 2 ( Queue 자료 구조 사용하기 ) - C++ 문제 풀이

문제 설명

 

문제 링크: http://www.acmicpc.net/problem/18258

 

풀이

문제에서는 큐(queue)를 구현해서 문제를 풀라고 되어있지만, std::queue 클래스를 사용해서 문제를 풀었다.

문자열을 읽어서 그 문자열에 따라 std:: queue 클래스의 각 기능을 사용하면 간단히 처리된다.

한번 큐(queue)를 구현해 보라는 문제인 거 같다.

 

나머지 글도 대부분 queue 자료 구조와 std::queue 클래스 사용법에 대하여 적을 생각이다.

 

큐(queue)는 컨테이너의 한 종류로서 큐에 맨 먼저 입력된 데이터가 먼저 출력될 수 있는 자료 구조입니다.

맨 먼저 입력된 데이터가 먼저 출력되어야 하는 FIFO (First Input First Out) 구조로서, 자료 접근에 제한된 기능을 가집니다.

 

큐(queue)의 구조

 

이런 구조는 입력된 순서대로 처리하는 것이 중요한 기능을 구현할 때 많이 고려됩니다.

프린트의 출력이나, 프로세스 관리 등이 있습니다.

 

std::queue 클래스를 사용하려면 다음 헤더를 포함해야 합니다.

#include <queue>

 

std::queue 클래스의 멤버 함수는 다음과 같습니다.

함   수 설                         명
empty 스택이 비었는지 검사합니다. 비었으면 true를 리턴합니다.
pop 큐의 가장 앞에 있는 데이터를 제거합니다.
push 큐의 가장 끝에 데이터를 추가합니다.
size 멤버의 개수를 리턴합니다.
front 큐의 가장 앞에 있는 멤버의 참조를 리턴합니다.
back 큐의 가장 뒤에 있는 멤버의 참조를 리턴합니다.

 

front, back 멤버 함수를 호출 시 가장 앞에 그리고 가장 뒤에 있는 멤버의 참조(reference)를 리턴하므로, 큐가 비어있으면 오류가 발생합니다.

이를 방지하기 위해 empty 함수 같은 테스트를 거쳐야 합니다.

queue<int> que;

if ( !que.empty()){
    int f = que.front();
    int b = que.back();
}

 

마지막으로, 그냥 cin 객체를 사용해서 입력받으면 "시간제한"에 걸립니다.

그래서 main함수 시작 시, 두 줄을 추가했습니다.

ios::sync_with_stdio(false);    // C runtime library와 동기화 제거
cin.tie(NULL);                  // cout과 동기화 제거

 

 

소스 코드

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

int main(){

    ios::sync_with_stdio(false);    // C runtime library와 동기화 제거
    cin.tie(NULL);                  // cout과 동기화 제거
    
    int N;
    cin >> N;

    string cmd;
    int num;
    queue<int> que;

    for(int i=0; i < N; i++){

        cin >> cmd;
        if ( cmd == "push"){
            cin >> num;

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

 

 

  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유