10828번 스택
https://www.acmicpc.net/problem/10828
#스택
스택(Stack)은 프로그래밍에서 가장 기본적인 자료구조 중 하나로, 한쪽 끝에서만 데이터를 삽입(Push)하거나 삭제 (Pop)할 수 있는 구조로 데이터를 일시적으로 저장하기 위해 사용됩니다. 스택은 후입선출(Last-In-First-Out, LIFO) 방식으로 데이터를 관리하며, 가장 최근에 추가된 데이터가 가장 먼저 제거됩니다. 이러한 특성 때문에 스택은 프로그램에서 임시적으로 데이터를 저장하는 용도로 많이 사용됩니다.
#Stack
1. stack 객체 생성
#include <stack> // stack헤더
stack<int>mystack;
top()int형 데이터를 저장하는 mystack 객체를 생성한다.
2. Stack에 데이터 삽입: push()
myStack.push(10); // 10을 Stack에 추가
myStack.push(20); // 20을 Stack에 추가
Stack에 데이터를 삽입하기 위해서는 push() 멤버 함수를 사용합니다. 이 함수는 Stack의 가장 위에 데이터를 추가합니다.
3. Stack의 가장 위 데이터 접근: top()
int topElement = myStack.top(); // Stack의 가장 위에 있는 데이터를 읽어옴
top() 멤버 함수를 사용하면 Stack의 가장 위에 있는 데이터에 접근할 수 있습니다. 이 함수는 데이터를 반환하며, Stack 자체를 수정하지 않습니다.
4. Stack에서 데이터 삭제: pop()
myStack.pop(); // Stack의 가장 위에 있는 데이터를 삭제
pop() 멤버 함수를 사용하여 Stack에서 가장 위에 있는 데이터를 삭제할 수 있습니다. 이 함수는 데이터를 반환하지 않습니다.
5. Stack이 비어있는지 확인: empty()
if (myStack.empty()) {
// Stack이 비어있는 경우 처리
}
empty() 멤버 함수는 Stack이 비어있는지 여부를 확인하는 데 사용됩니다. 비어있으면 true를, 아니면 false를 반환합니다.
6. Stack의 크기 확인: size()
int stackSize = myStack.size(); // Stack에 저장된 데이터의 개수 반환
size() 멤버 함수를 사용하면 Stack에 저장된 데이터의 개수를 확인할 수 있습니다.
#문제
#풀이
#include <iostream>
#include<stack>
#include <string>
using namespace std;
int main()
{
stack<int>mystack;
int n;
string str;
cin >> n;
for (int i = 0; i <= n; i++)
{
getline(cin, str); // str 입력
if (str.substr(0, 4) == "push") // str의 0부터 4까지가 push가 있는 경우
{
mystack.push(stoi(str.substr(5))); // str의 5번째에 있는 string을 int로 변환후 push
}
else if (str == "top") // top인 경우
{
if (mystack.empty()) cout << -1 << '\n';
else cout << mystack.top() << '\n';
}
else if (str == "size") // size인 경우
{
cout << mystack.size() << '\n';
}
else if (str == "empty") // empty인 경우
{
cout << mystack.empty() << '\n';
}
else if (str == "pop") // pop인 경우
{
if (mystack.empty()) cout << -1 << '\n';
else
{
cout << mystack.top() << '\n';
mystack.pop();
}
}
}
}
- 정수형 스택과 정수형 변수 n을 선언합니다.
- n의 값을 사용자로부터 입력받습니다. 이 값은 스택에 수행할 명령의 개수를 지정합니다.
- n번 반복하는 루프에 진입합니다.
- 각 반복에서는 getline 함수를 사용하여 사용자로부터 한 줄을 입력받고, 이를 문자열 변수 str에 저장합니다.
- str의 처음 네 문자가 push 명령인지 확인합니다. 맞다면 나머지 문자열에서 정수 값을 추출하고 push 함수를 사용하여 스택에 넣습니다.
- 명령이 top인 경우, 스택이 비어있는지 확인합니다. 비어있다면 -1을 출력합니다. 그렇지 않으면 top 함수를 사용하여 스택의 가장 위에 있는 요소를 출력합니다.
- 명령이 size인 경우, size 함수를 사용하여 스택의 크기를 출력합니다.
- 명령이 empty인 경우, empty 함수를 사용하여 스택이 비어있는지 여부를 출력합니다.
- 명령이 pop인 경우, 스택이 비어있는지 확인합니다. 비어있다면 -1을 출력합니다. 그렇지 않으면 top 함수를 사용하여 스택의 가장 위에 있는 요소를 출력하고, pop 함수를 사용하여 스택에서 제거합니다.
#결과
스택은 자료구조를 공부하는데 매우 중요한 개념 중 하나입니다. 스택의 특성을 이해하고 활용하는 것은 프로그래밍에서 매우 중요한 역할을 합니다.
'프로그래밍 > C++' 카테고리의 다른 글
[알고리즘/C++]버블정렬Bubble Sort (1) | 2023.06.07 |
---|---|
[백준/C++] 10828번 큐 (0) | 2023.05.31 |
[C++] 함수 인수 전달 방식의 차이점 이해하기 (0) | 2023.04.20 |
[C++]윈도우 API를 활용한 절대 음감 게임 (0) | 2023.04.06 |
[백준/C++] 16076번 휴식이 필요해 문제풀이 (0) | 2023.04.01 |