Baekjoon 10828 스택

배혜진·2023년 1월 11일

Baekjoon Class 2

목록 보기
2/7

작년에 Stack을 배워서 쉽게 풀 수 있을 줄 알았는데
생각보다 처음부터 감이 잡히지는 않았다..

그래서 작년에 공부할 때 저장해둔 노션을 참고해서 풀었다.

비슷한 문제 여러번 풀다보면 감이 잡히지 않을까 !


push, pop, size, empty, top이 기본적인 stack의 기능 !
stack은 LIFO로, 마지막에 들어오는 것이 먼저 나가는 방식이다.

클래스 선언을 통해 Stack 클래스를 선언한다.

#include <iostream>
using namespace std;

class Stack { // 스택 클래스 만들기
    public: // public 선언으로 클래스 밖에서도 접근이 가능하게 만든다.
    int stack[10000]; // 문제에서 제시된 범위를 참고하여 정수형 배열 선언
    int size;

    Stack(){size=0;}  // 초기화하는 함수이다. constructor, 생성자라고 한다. size를 0으로 설정한다.
    
    void push(int data){
        stack[size]=data;
        size+=1;
    }

    bool empty() {
        if(size==0){ // size가 0이면 empty가 진실이다.
            return true;
        }
        else{
            return false;
        }
    }

    int pop(){ // 배열의 가장 마지막에 있는 것을 지우는 함수.
        if(empty()){ // 비어있으면 지울 것이 없기때문에 -1을 반환한다.
            return -1;
        }
        else{
            stack[size-1]=0;
            size=size-1;
            return stack[size];
        }
    }
    int top(){ // 배열의 가장 마지막에 있는 것을 반환한다.
        if(empty())
        {
            return -1;
        }
        else{
            return stack[size-1];
        }
    }
    
};

int main(void){
    int N;
    cin>> N;
    Stack s;
    for (int i=0;i<N;i++){
        string cmd; // string으로 받아온다.
        cin>>cmd; // cin string은 공백을 기준으로 하기때문에 제시된 문제와 부합한다.
        if(cmd=="push"){ // string이 무엇이냐에 따라 명령어를 시행한다.
            int data;
            cin>>data;
            s.push(data);
        }
        else if(cmd=="pop"){
            cout<<(s.empty()?-1:s.top())<<endl;
            if(!s.empty()){
                s.pop();
            }
        }
        else if(cmd=="size"){
            cout<<s.size<<endl;
        }
        else if(cmd=="empty"){
            cout<<s.empty()<<endl;
        }
        else if(cmd=="top"){
            cout<<s.top()<<endl;
        }
    }
    return 0;
}
profile
HYU🦁 Information System 22✨

0개의 댓글