안녕하세요, C++ 프로그래밍을 공부하는 여러분! 이번에는 중요한 자료 구조 중 하나인 '스택(Stack)'에 대해 이야기하려 합니다. 스택은 데이터 저장의 특별한 형태로 많은 상황에서 유용하게 쓰입니다. C++을 통해 스택의 개념과 활용에 대해 살펴봅시다.
스택이란 무엇인가?
스택은 특별한 방식으로 데이터를 저장하는 구조입니다. '후입선출'(LIFO: Last In First Out)의 원리를 따르는데, 이는 마지막에 추가된 데이터가 가장 먼저 제거됨을 의미합니다.
C++ 시작하기
C++에서는 STL (Standard Template Library)의 'stack'을 통해 스택을 사용할 수 있습니다. 아래는 스택 생성과 데이터 추가를 보여주는 예시입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include <iostream> #include <stack> // 스택 라이브러리를 포함합니다. int main() { std::stack<int> s; // int 형 스택을 선언합니다. // 스택에 데이터를 추가합니다. s.push(1); s.push(2); s.push(3); // 이 시점에서 스택은 다음과 같이 보입니다: [1, 2, 3] // (1이 가장 아래에, 3이 가장 위에 위치하고 있습니다) } | cs |
스택에서 데이터 접근 및 삭제하기
스택의 맨 위에 있는 데이터를 확인하거나 제거하려면 top 및 pop 함수를 사용합니다. 아래는 이에 대한 예시입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <iostream> #include <stack> int main() { std::stack<int> s; s.push(1); s.push(2); s.push(3); // 스택: [1, 2, 3] // 스택의 맨 위를 확인합니다. std::cout << s.top() << std::endl; // 출력: 3 // 스택의 맨 위를 삭제합니다. s.pop(); // 이제 스택은 [1, 2]입니다. std::cout << s.top() << std::endl; // 출력: 2 } | cs |
스택 활용 예시: 괄호 짝 맞추기
스택은 다양한 프로그래밍 문제 해결에 사용됩니다. 예를 들어, 다음은 스택을 이용해 괄호 짝이 맞는지 확인하는 예시입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | #include <iostream> #include <stack> #include <string> bool isValidParentheses(std::string str) { std::stack<char> s; for (char& c : str) { switch (c) { case '(': case '{': case '[': s.push(c); break; case ')': if (s.empty() || s.top() != '(') return false; else s.pop(); break; case '}': if (s.empty() || s.top() != '{') return false; else s.pop(); break; case ']': if (s.empty() || s.top() != '[') return false; else s.pop(); break; } } return s.empty(); } int main() { std::string str = "({[{}]})"; std::cout << (isValidParentheses(str) ? "Balanced" : "Not Balanced") << std::endl; return 0; } | cs |
스택은 효과적인 데이터 관리와 복잡한 문제 해결에 유용한 도구입니다. C++을 통해 스택의 개념과 사용법을 이해하면 다양한 프로그래밍 상황에서 더욱 강력한 코드를 작성할 수 있습니다. 여러분의 프로그래밍 여정에서 스택이 중요한 도구가 되길 바랍니다.
댓글 없음:
댓글 쓰기