본문 바로가기

BAEKJOON/자료 구조

백준 10845번 [큐](C++)-yes6686- 티스토리

728x90
SMALL

백준 문제 풀이: 10845 [큐]


문제 링크: https://www.acmicpc.net/problem/10845

문제 설명:

정수를 저장하는 큐를 구현하는 문제입니다. 큐에 대해 다음 명령을 처리합니다:

  • push X: 정수 X를 큐에 넣습니다.
  • pop: 큐에서 가장 앞에 있는 정수를 빼고 출력합니다. 큐가 비어있으면 -1을 출력합니다.
  • size: 큐에 들어있는 정수의 개수를 출력합니다.
  • empty: 큐가 비어있으면 1, 아니면 0을 출력합니다.
  • front: 큐의 가장 앞에 있는 정수를 출력합니다. 큐가 비어있으면 -1을 출력합니다.
  • back: 큐의 가장 뒤에 있는 정수를 출력합니다. 큐가 비어있으면 -1을 출력합니다.

문제 해결 코드


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

int main() {
    queue q;
    int n;
    cin >> n;
    string s;
    int x;

    for (int i = 0; i < n; i++) {
        cin >> s;

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

코드 설명

  • 핵심 알고리즘: C++ STL의 queue를 사용하여 큐의 기본 동작을 구현합니다.
  • 구현 세부사항:
    • 큐에 원소를 추가하거나 제거하는 pushpop 동작을 구현합니다.
    • 큐의 크기와 비어있는지 여부를 sizeempty 명령으로 확인합니다.
    • frontback 명령으로 큐의 맨 앞과 맨 뒤 값을 확인합니다.
    • 조건에 따라 큐가 비어 있을 경우 -1을 출력합니다.
  • 시간 복잡도: 모든 명령이 O(1)의 시간 복잡도로 처리됩니다.

결과

큐의 기본 명령을 구현하고, 문제에서 주어진 동작에 맞게 처리합니다. C++의 queue를 사용하여 효율적으로 해결했습니다. 다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!

728x90
LIST