개발일지
article thumbnail

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();
            }
        }

    }
}

 

  1. 정수형 스택과 정수형 변수 n을 선언합니다.
  2. n의 값을 사용자로부터 입력받습니다. 이 값은 스택에 수행할 명령의 개수를 지정합니다.
  3. n번 반복하는 루프에 진입합니다.
  4. 각 반복에서는 getline 함수를 사용하여 사용자로부터 한 줄을 입력받고, 이를 문자열 변수 str에 저장합니다.
  5. str의 처음 네 문자가 push 명령인지 확인합니다. 맞다면 나머지 문자열에서 정수 값을 추출하고 push 함수를 사용하여 스택에 넣습니다.
  6. 명령이 top인 경우, 스택이 비어있는지 확인합니다. 비어있다면 -1을 출력합니다. 그렇지 않으면 top 함수를 사용하여 스택의 가장 위에 있는 요소를 출력합니다.
  7. 명령이 size인 경우, size 함수를 사용하여 스택의 크기를 출력합니다.
  8. 명령이 empty인 경우, empty 함수를 사용하여 스택이 비어있는지 여부를 출력합니다.
  9. 명령이 pop인 경우, 스택이 비어있는지 확인합니다. 비어있다면 -1을 출력합니다. 그렇지 않으면 top 함수를 사용하여 스택의 가장 위에 있는 요소를 출력하고, pop 함수를 사용하여 스택에서 제거합니다.

#결과

스택은 자료구조를 공부하는데 매우 중요한 개념 중 하나입니다. 스택의 특성을 이해하고 활용하는 것은 프로그래밍에서 매우 중요한 역할을 합니다.

profile

개발일지

@damin06

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!