개발일지
article thumbnail
Published 2023. 5. 31. 00:40
[백준/C++] 10828번 큐 프로그래밍/C++

10828번 큐

https://www.acmicpc.net/problem/10845


#큐

큐는 선입선출(FIFO, First-In-First-Out) 원칙에 따라 동작하는 추상적인 자료구조입니다. 큐는 일상 생활에서 줄을 서서 기다리는 것과 비슷한 개념으로 이해할 수 있습니다.큐에는 두 가지 주요 연산이 있습니다: "enqueue"와 "dequeue"입니다.

  • Enqueue: 큐의 뒤쪽에 요소를 추가합니다. 이는 줄의 맨 뒤에 사람이 추가되는 것과 비슷합니다.
  • Dequeue: 큐의 앞쪽에서 요소를 제거합니다. 줄의 맨 앞에 있는 사람이 서비스를 받고 나가는 것과 비슷합니다.

이렇게 큐에서는 항상 첫 번째로 들어온 요소가 먼저 처리되고, 마지막으로 들어온 요소가 가장 나중에 처리됩니다.


#문제


#풀이

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

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    queue<int>myqueue;
    int n;
    string str;
    cin >> n;
    cin.ignore();
    while (n--)
    {
        getline(cin, str);
        if (str.substr(0, 4) == "push")
        {
            myqueue.push(stoi(str.substr(5)));
        }
        else if (str == "front")
        {
            if (myqueue.empty()) cout << -1 << '\n';
            else    cout << myqueue.front() << '\n';

        }
        else if (str == "back")
        {
            if (myqueue.empty()) cout << -1 << '\n';
            else    cout << myqueue.back() << '\n';
        }
        else if (str == "size")
        {
            cout << myqueue.size() << '\n';
        }
        else if (str == "empty")
        {
            cout << myqueue.empty() << '\n';
        }
        else if (str == "pop")
        {
            if (myqueue.empty()) cout << -1 << '\n';
            else
            {
                cout << myqueue.front() << '\n';
                myqueue.pop();
            }
        }

    }
}

 

  1. queue<int> 클래스의 객체를 myqueue라는 이름으로 생성합니다.
  2. 큐에 수행할 작업의 개수를 저장하기 위해 변수 n을 선언합니다.
  3. 각 작업에 대한 입력 문자열을 저장하기 위해 문자열 변수 str을 선언합니다.
  4. cin >> n을 사용하여 사용자로부터 n의 값을 읽어옵니다.
  5. 코드는 조건문 (if 및 else if)을 사용하여 입력 문자열에 기반하여 수행할 작업을 결정합니다.
  6. 입력 문자열이 "push"로 시작하는 경우, stoi()를 사용하여 문자열에서 정수 값을 추출하고, myqueue.push()를 사용하여 큐에 해당 값을 넣습니다.
  7. 입력 문자열이 "front"인 경우, 큐가 비어 있는지 확인하고, 비어 있다면 -1을 출력하고, 그렇지 않으면 myqueue.front()를 사용하여 큐의 맨 앞 요소를 출력합니다.
  8. 입력 문자열이 "back"인 경우, 큐가 비어 있는지 확인하고, 비어 있다면 -1을 출력하고, 그렇지 않으면 myqueue.back()을 사용하여 큐의 맨 뒤 요소를 출력합니다.
  9. 입력 문자열이 "size"인 경우, myqueue.size()를 사용하여 큐의 크기를 출력합니다.
  10. 입력 문자열이 "empty"인 경우, myqueue.empty()를 사용하여 큐가 비어 있는지 여부를 출력합니다. 이는 불리언 값 (참인 경우 1, 거짓인 경우 0)을 반환합니다.
  11. 입력 문자열이 "pop"인 경우, 큐가 비어 있는지 확인하고, 비어 있다면 -1을 출력합니다. 그렇지 않으면, myqueue.front()를 사용하여 큐의 맨 앞 요소를 출력한 후, myqueue.pop()을 사용하여 큐에서 제거합니다.
  12. 작업이 모두 완료될 때까지 루프가 계속됩니다.
  13. 루프가 종료되면, main() 함수가 종료되고 프로그램이 종료됩니다.

 

종합적으로, 이 코드는 큐를 구현하고, 요소를 추가(push), 맨 앞(front) 및 맨 뒤(back) 요소에 접근, 큐의 크기(size) 및 비어 있는지 여부(empty)를 확인하고, 맨 앞에서 요소를 제거(pop)하는 작업을 수행합니다.


#결과

큐를 잘 활용하면 프로그램의 효율성을 높일 수 있으므로, 데이터 구조 학습 과정에서 큐에 대한 이해는 필수입니다.

profile

개발일지

@damin06

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!