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

STL stack 사용법 & 예제 총정리

by kangs' tong 2023. 9. 12.

1. STL stack이란?

STL(stack template library)은 C++에서 제공하는 표준 라이브러리 중 하나로, 효율적인 데이터 구조를 제공하여 데이터의 삽입 및 삭제를 편리하게 처리할 수 있도록 도와줍니다. STL stack은 LIFO(Last-In-First-Out) 원칙에 따라 데이터를 저장하는 구조이며, push(삽입)과 pop(삭제) 연산을 지원합니다.

2. STL stack 사용법

STL stack을 사용하기 위해서는 stack 헤더 파일을 #include하여 가져와야 합니다. 아래는 STL stack의 기본 사용 방법입니다.

#include <stack>

int main() {
    std::stack<int> myStack;  // 정수형 스택 생성

    // 원소 삽입
    myStack.push(1);
    myStack.push(2);
    myStack.push(3);

    // 원소 삭제
    myStack.pop();

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

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

    // 스택의 top에 위치한 원소 확인
    int topElement = myStack.top();

    return 0;
}

3. STL stack 예제

예제 1: 괄호 매칭 검사하기

괄호 짝이 맞는지 검사하는 예제입니다.

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

bool areParenthesesMatched(const std::string& expression) {
    std::stack<char> parenthesesStack;

    for (char c : expression) {
        if (c == '(' || c == '[' || c == '{') {
            parenthesesStack.push(c);
        } else if (c == ')' || c == ']' || c == '}') {
            if (parenthesesStack.empty()) {
                return false;
            } else if ((c == ')' && parenthesesStack.top() == '(') ||
                       (c == ']' && parenthesesStack.top() == '[') ||
                       (c == '}' && parenthesesStack.top() == '{')) {
                parenthesesStack.pop();
            } else {
                return false;
            }
        }
    }

    return parenthesesStack.empty();
}

int main() {
    std::string expression;
    std::cout << "괄호를 입력하세요: ";
    std::cin >> expression;

    if (areParenthesesMatched(expression)) {
        std::cout << "올바른 괄호입니다." << std::endl;
    } else {
        std::cout << "올바르지 않은 괄호입니다." << std::endl;
    }

    return 0;
}

예제 2: 후위 표기식 계산하기

후위 표기식을 이용하여 사칙 연산을 계산하는 예제입니다.

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

int evaluatePostfixExpression(const std::string& expression) {
    std::stack<int> operandStack;

    std::istringstream iss(expression);
    std::string token;

    while (iss >> token) {
        if (token == "+" || token == "-" || token == "*" || token == "/") {
            int operand2 = operandStack.top();
            operandStack.pop();
            int operand1 = operandStack.top();
            operandStack.pop();

            int result;
            if (token == "+") {
                result = operand1 + operand2;
            } else if (token == "-") {
                result = operand1 - operand2;
            } else if (token == "*") {
                result = operand1 * operand2;
            } else if (token == "/") {
                result = operand1 / operand2;
            }

            operandStack.push(result);
        } else {
            int operand = std::stoi(token);
            operandStack.push(operand);
        }
    }

    return operandStack.top();
}

int main() {
    std::string expression;
    std::cout << "후위 표기식을 입력하세요: ";
    std::getline(std::cin, expression);

    int result = evaluatePostfixExpression(expression);
    std::cout << "계산 결과: " << result << std::endl;

    return 0;
}

마무리

이번 포스팅에서는 STL stack의 사용법과 예제를 살펴보았습니다. STL stack은 효율적인 데이터 구조로, LIFO 원칙에 따라 데이터를 저장하고 삽입/삭제 연산을 수행할 수 있습니다. 이를 활용하여 괄호 매칭 검사나 후위 표기식 계산 등 다양한 문제를 해결할 수 있습니다.

댓글