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 스택은 스택을 효율적으로 구현할 수 있도록 제공되는 강력한 도구입니다.
댓글