스택
Coddy의 C++ - 표준 템플릿 라이브러리 코스 레슨. 23개 중 10번째.
이 장에서는 컨테이너 어댑터(container adaptors)에 대해 배웁니다. 여러분이 배우게 될 것들은 stack, queue 그리고 priority-queue입니다.
C++ Stack은 LIFO (Last in-First out, 후입선출) 원칙을 기반으로 하는 데이터 구조입니다. 이는 스택 데이터 구조에 마지막으로 추가된 요소가 가장 먼저 제거되고, 스택에 처음 추가된 요소는 가장 나중에 접근할 수 있음을 의미합니다 (이것은 접시나 팬케이크를 쌓는 것과 매우 유사합니다. 접시를 쌓을 때, 가장 먼저 놓인 바닥에 있는 접시를 꺼낼 수 없으며, 맨 위에 있는 마지막 접시를 먼저 꺼내야 합니다).

stack<dataType> stackName;C++에서 스택을 생성하려면, 먼저 C++ 파일 상단에 #include <stack>을 사용하여 stack 헤더 파일을 포함해야 합니다.
그런 다음 아래와 같이 스택 변수를 선언할 수 있습니다.
stack<int> number_stack = {1, 2, 3};그렇다면 스택에 요소를 어떻게 추가할까요? - push() 메서드를 사용합니다.
stack<int> number_stack;
number_stack.push(1);
number_stack.push(2);
...이와 같이 스택에 새로운 요소를 추가할 수 있습니다.
또한, 화면에 요소를 표시해야 합니다. 스택의 맨 위에 있는 마지막 값을 반환하는 top() 메서드를 사용하여 이를 수행합니다.
cout << number_stack.top();Output:
2하지만 이제 top()을 계속 화면에 출력하면 마지막 요소(이 경우 2)만 계속 나오게 됩니다. 따라서 맨 위에서 요소를 제거하는 방법이 필요합니다. 이를 위해 스택의 맨 위에 있는 마지막 요소를 제거하는 pop() 메서드를 사용합니다.
cout << number_stack.top() << endl;
number_stack.pop();
cout << number_stack.top();Output:
2
1결론적으로, stack 데이터 구조는 C++뿐만 아니라 일반적인 코딩 및 알고리즘 문제 풀이(competitive programming)에서 매우 유용합니다. 핵심 요소는 Last in-First out 원칙을 사용한다는 점입니다.
스택 메서드 (Stack Methods)
| 메서드 | 기능 |
size() | 스택에 있는 요소의 개수를 반환합니다. |
empty() | 스택이 비어 있으면 true를, 그렇지 않으면 false를 반환합니다. |
swap() | 한 스택의 내용을 다른 스택과 바꿉니다. |
챌린지
쉬움입력으로 숫자 N이 주어집니다. 다음 N개의 줄에는 각각 하나의 숫자가 주어집니다.
스택(stack)을 사용하여 입력된 모든 숫자를 출력하되, 마지막 숫자부터 역순으로 출력하세요.
Input
5
1
2
3
4
5Output
5
4
3
2
1직접 해보기
#include <stack>
#include <iostream>
using namespace std;
int main()
{
// Enter your code here
return 0;
}C++ - 표준 템플릿 라이브러리의 모든 레슨
직접 연습해 보세요: 온라인 C++ 컴파일러