문제 풀이/BOJ 문제 풀이

[BOJ알고리즘, C++]#18258_큐2, 선형 자료구조, 큐

Hardii2 2023. 6. 22. 15:32

 

[BOJ알고리즘, C++]#18258_큐 2

 

BOJ 알고리즘 문제 풀이, 18258번 문제 큐 2

STL의 queue컨테이너를 활용하는 방법에 대해 알아보겠습니다.

 


 

Overview

 

  1. 문제
  2. 풀이
  3. 코드

 

#0. 문제

 

 

#1. 풀이

1. 큐

 

[자료 구조]#0_선형 자료구조

[자료 구조] #0_선형 자료구조 선형 자료구조에 대해 알아보겠습니다. Overview 개념 스택 큐 원형 큐 배열 벡터 리스트 이중 연결 리스트 #0. 개념 1. 선형 자료구조? 선형 자료구조는 데이터를 일렬

webddevys.tistory.com

 

  • 큐는 먼저 삽입된 데이터가 먼저 삭제되는 FIFO(First In First Out) 방식으로 동작하는 선형 자료구조입니다.
  • 데이터 목록의 한쪽에서만(top) 접근이 가능한 스택과 달리, 큐는 데이터 목록의 양쪽 끝(front, back)에서 접근이 가능합니다.
  • 삽입/제거의 위치와 방법이 제한된 유한 순차 리스트라는 점에서 스택과 동일하지만, 큐는 스택과 달리 push 한 데이터와 pop 한 데이터가 다릅니다!
  • 큐는 그래프 자료구조의 BFS(너비 우선 탐색)에 활용되며, 작업들을 순차적으로 처리하거나, 멀티 스레드 환경에서 동기화를 위한 버퍼로 활용됩니다.

 

2. queue 컨테이너

#include <iostream>
#include <queue>

using namespace std;

int main() {
	queue<int> q;

	// #1. 삽입
	q.push(10);
	q.push(20);
	q.push(30);

	// #2. 제거
	q.pop();

	// #3. 접근
	cout << q.front() << '\n';
	cout << q.back() << '\n';

	// #4. 크기
	cout << q.size() << '\n';

	// #5. 비어있는지 체크
	q.empty() ? cout << "empty" << '\n' : cout << "Not Empty" << '\n';

	return 0;
}

 

#2. 코드

1. 코드

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

int main()
{
    ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);

    int N, num;
    string str;
    queue<int> q;

    cin >> N;

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

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

}