안녕하세요 준준 입니다.
오늘은 C++ STL 중 하나인
Stack(스택)에 대해 알아보도록 하겠습니다.
What is Stack?
스택의 사전적 의미로는 '쌓다', '더미'입니다.
상자에 물건을 쌓아 올리듯 데이터를 쌓는 자료 구조라고 할 수 있습니다.
스택은 대표적인 LIFO (Last In First Out) 구조입니다.
따라서 제일 마지막에 넣은 데이터가 가장 먼저 빠져나가는 것을 알 수 있습니다.
쉬운 예시로 쌓여 있는 그릇을 생각하시면 쉽습니다.
상식적으로 그릇은 쌓을 때 맨 위에서부터 쌓고 꺼낼 때는 맨 위에부터 꺼내곤 합니다.
따라서 가장 최근에 넣은 그릇을 가장 빨리 쓰게 됩니다.
이해가 조금 되셨을 까요?
Stack의 특징
1. 먼저 들어간 자료가 나중에 나오는 구조
2. 시스템 해킹에서 버퍼오버플로우 취약점을 이용한 공격을 할 때 스택 메모리의 영역에서 수행
3. 인터럽트처리, 수식의 계산, 서브루틴의 복귀 번지 저장 등에 사용
4. 그래프의 깊이 우선 탐색(DFS)에서 사용
5. 재귀적 함수를 호출할 때 사용
사용 방법
-헤더 파일
스택을 사용하기 위해서는 #include <stack> 먼저 선언해주어야 합니다.
#include <stack>
-스택 선언
스택을 선언하는 방법은
stack<자료형> 이름 / 이렇게 선언 하시면 됩니다.
stack<int> s;
-스택 함수
스택을 잘 활용하기 위해서는 어떤 함수들이 있을까요?
▷ 스택에 데이터 추가하기
스택이름. push(데이터) 형태로 데이터를 추가합니다.
stack.push(element)
▷ 스택에 데이터 삭제하기
스택이름. pop(데이터) 형태로 스택의 top 데이터를 삭제합니다.
stack.pop()
▷ 스택의 제일 위(탑, top) 데이터 반환
스택이름. top() 형태로 제일 최상위 데이터를 반환합니다.
stack.top()
▷ 스택의 사이즈 반환
스택이름. size() 형태로 스택의 현재 사이즈를 반환합니다.
stack.size()
▷ 스택이 비어있는지 확인
스택이름. empty() 형태로 스택이 비어있는지 확인합니다.
stack.empty()
▷ 스택 SWAP : 두 스택의 내용 바꾸기
스택 1과 스택 2 두 스택의 내용을 바꾸고 싶은 경우, 내장된 swap 함수를 사용합니다.
swap(스택 1 이름, 스택 2 이름) 형태로 두 스택의 내용을 바꿉니다.
swap(stack1 , stack2)
아래는 예제 코딩 테스트 입니다.
#include <string>
#include <vector>
#include <stack>
#include <sstream>
using namespace std;
int solution(string s) {
int answer = 0;
stringstream ss(s);
string temp;
stack<string> tack;
while (ss >> temp) {
if (temp == "Z") {
if (!tack.empty()) {
tack.pop();
}
} else {
tack.push(temp);
}
}
while (!tack.empty()) {
answer += stoi(tack.top());
tack.pop();
}
return answer;
}
'프로그래밍 언어 > c++' 카테고리의 다른 글
[c++] Future 병렬 처리 방법 (0) | 2024.05.29 |
---|---|
[c++] fetch_add() 함수 (0) | 2024.05.29 |
[c++] 대문자, 소문자 구분 하는 방법 (islower, isupper) (0) | 2023.05.03 |
[C++]size_t 와 string::npos란 무엇일까? (0) | 2023.04.29 |
[C++] pow, sqrt 함수란?(루트함수, 제곱, 제곱근) (0) | 2023.04.28 |