본문 바로가기

BAEKJOON/자료 구조

백준 10828번 [스택](C++)-yes6686- 티스토리

728x90
SMALL

백준 문제 풀이: 10828 [스택]


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

문제 설명:

정수를 저장하는 스택을 구현하고, 주어진 명령을 처리하는 문제입니다. 스택에 대해 다음 명령을 처리합니다:

  • push X: 정수 X를 스택에 넣습니다.
  • pop: 스택에서 가장 위에 있는 정수를 제거하고 출력합니다. 스택이 비어있으면 -1을 출력합니다.
  • size: 스택에 들어있는 정수의 개수를 출력합니다.
  • empty: 스택이 비어있으면 1, 아니면 0을 출력합니다.
  • top: 스택의 가장 위에 있는 정수를 출력합니다. 스택이 비어있으면 -1을 출력합니다.

문제 해결 코드


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

stack s;

int main() {
    int n;
    cin >> n;
    string a;
    int k;

    for (int i = 0; i < n; i++) {
        cin >> a;
        if (a == "push") {
            cin >> k;
            s.push(k);
        } else if (a == "top") {
            if (s.empty()) {
                cout << -1 << endl;
            } else {
                cout << s.top() << endl;
            }
        } else if (a == "size") {
            cout << s.size() << endl;
        } else if (a == "empty") {
            cout << (s.empty() ? 1 : 0) << endl;
        } else if (a == "pop") {
            if (s.empty()) {
                cout << -1 << endl;
            } else {
                cout << s.top() << endl;
                s.pop();
            }
        }
    }
    return 0;
}

코드 설명

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

결과

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

728x90
LIST