10828) 스택

경지현·2023년 7월 31일

algorithm_study

목록 보기
6/21

문제요약

스택과 그에 따른 메소드(Push, pop, top, empty, size)를 구현하는 문제

풀이

  1. c++을 사용한 만큼, 클래스를 사용해 스택 객체를 생성
  2. array의 크기를 미리 정해놓기보다 동적으로 크기가 조절되는 동적 프로그래밍을 사용

코드

//
//  tmp.cpp
//  algorithm_study
//
//  Created by Jihyun Kyoung on 2023/07/31
//
#include <iostream>
using namespace std;

class Instance{
    private:
        Instance* ptr;
        int n;

    public:
        Instance(int num){
            n = num;
        }

        void push(Instance* n_ins){
            ptr = n_ins;
        }

        Instance *get_self(){
            return &*this;
        }
        Instance *get_ptr(){
            return ptr;
        }
        int getNum(){
            return n;
        }

};

class Stack{
    private:
        Instance *ptr;
        int size_n;

    public:
        Stack(){
            size_n = 0;
            ptr = NULL;
        }

// push X: 정수 X를 스택에 넣는 연산이다.
    void push(int n){
        Instance* tmp = new Instance(n);
        (*tmp).push(ptr);
        ptr = (*tmp).get_self();
        size_n++;
    }
// pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
    int pop(){
        if(size_n == 0)
            return -1;
        int tmp = (*ptr).getNum();
        ptr = (*ptr).get_ptr();
        size_n--;
        return tmp;
    }
// size: 스택에 들어있는 정수의 개수를 출력한다.
    int size(){
        return size_n;
    }
// empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
    int empty(){
        if(size_n == 0)
            return 1;
        else 
            return 0;
    }
// top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
    int top(){
        if(size_n == 0)
            return -1;
        int tmp = (*ptr).getNum();
        return tmp;
    }
};

int main(){
    int num, n, tmp;
    string menu;
    Stack stack;

    cin>>num;
    for(int i =0;i<num;i++){
    cin>>menu;  
    if(menu.compare("push")==0){
        cin >> tmp;
        stack.push(tmp);
    }
    else if(menu.compare("pop")==0){
            tmp = stack.pop();
            cout<<tmp<<endl;
    }
    else if(menu.compare("top")==0){
            tmp = stack.top();
            cout<<tmp<<endl;
    }
    else if(menu.compare("empty")==0){
        tmp = stack.empty();
        cout<<tmp<<endl;
    }
    else if(menu.compare("size")==0){
        tmp = stack.size();
        cout<<tmp<<endl;
    }
    

    }

}
profile
그냥 사람

0개의 댓글