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 원칙에 따라 데이터를 저장하고 삽입/삭제 연산을 수행할 수 있습니다. 이를 활용하여 괄호 매칭 검사나 후위 표기식 계산 등 다양한 문제를 해결할 수 있습니다.
댓글