본문 바로가기
카테고리 없음

STL stack 사용법 & 예제 총정리

by sftt 2023. 12. 6.

STL Stack 사용법 & 예제

Stack이란?

스택(Stack)은 데이터를 일시적으로 저장하기 위한 자료구조 중 하나로, 후입선출(LIFO, Last-In-First-Out) 원리를 따릅니다. 말 그대로 맨 마지막에 추가된 데이터가 가장 먼저 제거됩니다.

STL(Stack Template Library)에서는 C++에서 스택을 구현하는 방법을 제공하며, stack 헤더를 통해 사용할 수 있습니다. #include <stack>으로 헤더 파일을 포함시킨 뒤 STL 스택에 대한 기능을 사용할 수 있습니다.

STL Stack 사용법

STL 스택을 사용하기 위해서는 먼저 std 네임스페이스를 선언하고, 스택을 생성해야 합니다. 스택의 타입은 템플릿으로 정의되어 있으며, 템플릿 인수로 스택에 저장할 원소의 자료형을 지정해줍니다.

#include <stack>

int main() {
    std::stack<int> st;

    // 스택에 데이터 추가
    st.push(1);
    st.push(2);
    st.push(3);

    // 스택의 맨 위(가장 최근) 원소 확인
    int topValue = st.top(); // 3

    // 스택의 크기 확인
    int size = st.size(); // 3

    // 스택이 비어있는지 확인
    bool isEmpty = st.empty(); // false

    // 스택에 데이터 제거
    st.pop(); // top 원소인 3 제거

    return 0;
}

STL Stack 예제 - 괄호 짝 검사

스택은 괄호 짝 검사처럼 뒤쪽에서 들어온 괄호가 앞쪽에 있는 괄호와 짝을 이루는지 검사하는데 유용하게 사용될 수 있습니다.

#include <iostream>
#include <stack>
#include <string>

bool isBalanced(const std::string& expression) {
    std::stack<char> st;

    // 표현식의 각 문자에 대해 반복
    for (char c : expression) {
        if (c == '(' || c == '[' || c == '{') {
            st.push(c); // 여는 괄호는 스택에 추가
        } else if (c == ')' || c == ']' || c == '}') {
            // 닫는 괄호인 경우 짝이 맞는지 확인
            if (st.empty()) {
                return false; // 스택이 비어있으면 불균형
            } else if (c == ')' && st.top() == '(') {
                st.pop();
            } else if (c == ']' && st.top() == '[') {
                st.pop();
            } else if (c == '}' && st.top() == '{') {
                st.pop();
            } else {
                return false; // 짝이 맞지 않으면 불균형
            }
        }
    }

    return st.empty(); // 모든 문자를 확인한 뒤 스택이 비어있는지 확인
}

int main() {
    std::string expression = "{(1 + 2) * [3 - 4]}";
    bool result = isBalanced(expression);

    if (result) {
        std::cout << "괄호가 균형을 이룹니다." << std::endl;
    } else {
        std::cout << "괄호가 균형을 이루지 않습니다." << std::endl;
    }

    return 0;
}

위 예제는 주어진 표현식에서 괄호의 짝이 일치하는지 여부를 검사합니다. 여는 괄호는 스택에 추가하고, 닫는 괄호가 나오면 스택의 맨 위에 있는 원소와 짝이 맞는지 확인합니다. 모든 문자를 확인한 뒤 스택이 비어있으면 괄호가 균형을 이루고, 스택에 원소가 남아있다면 균형을 이루지 않는 것입니다.

이처럼 STL 스택은 스택을 효율적으로 구현할 수 있도록 제공되는 강력한 도구입니다.

댓글