Menu
CoddyTech

스택

Coddy의 C++ - 표준 템플릿 라이브러리 코스 레슨. 23개 중 10번째.

이 장에서는 컨테이너 어댑터(container adaptors)에 대해 배웁니다. 여러분이 배우게 될 것들은 stack, queue 그리고 priority-queue입니다.


C++ Stack은 LIFO (Last in-First out, 후입선출) 원칙을 기반으로 하는 데이터 구조입니다. 이는 스택 데이터 구조에 마지막으로 추가된 요소가 가장 먼저 제거되고, 스택에 처음 추가된 요소는 가장 나중에 접근할 수 있음을 의미합니다 (이것은 접시나 팬케이크를 쌓는 것과 매우 유사합니다. 접시를 쌓을 때, 가장 먼저 놓인 바닥에 있는 접시를 꺼낼 수 없으며, 맨 위에 있는 마지막 접시를 먼저 꺼내야 합니다).

C++ stack illustration

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()한 스택의 내용을 다른 스택과 바꿉니다.
challenge icon

챌린지

쉬움

입력으로 숫자 N이 주어집니다. 다음 N개의 줄에는 각각 하나의 숫자가 주어집니다. 
스택(stack)을 사용하여 입력된 모든 숫자를 출력하되, 마지막 숫자부터 역순으로 출력하세요.

 

Input
5
1
2
3
4
5
Output
5
4
3
2
1

직접 해보기

#include <stack>
#include <iostream>

using namespace std;

int main()
{
    // Enter your code here

    return 0;
}

C++ - 표준 템플릿 라이브러리의 모든 레슨

직접 연습해 보세요: 온라인 C++ 컴파일러