ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준 10828 스택 [C++]
    알고리즘 2018. 11. 25. 21:01


    문제 링크 : https://www.acmicpc.net/problem/10828


    소스코드


    #include <iostream>
    #include <string>
    using namespace std;
    class Stack {
        int tos;
        int *p;
        int size;
    public:
        Stack(int size) {
            tos = -1;
            this->size = size;
            p = new int[size];
        }
        ~Stack() { delete[] p; }
        void push(int n);
        bool pop(int &n);
        bool empty();
        int Top();
        int Size();
    };
    void Stack::push(int n) {
        ++tos;
        p[tos] = n;
    }
    bool Stack::pop(int &n) {
        if (empty()) return false;
        n = p[tos];
        --tos;
        return true;
    }
    bool Stack::empty() {
        if (tos == (-1)) return true;
        else return false;
    }
    int Stack::Top() {
        return p[tos];
    }
    int Stack::Size() {
        return tos +1;
    }
    int main() {
        int n;
        cin >> n;
        string text;
        cin.ignore();
        string order;
        Stack *s=new Stack(10000);
        for (int i = 0; i < n; ++i) {
            getline(cin, order);
            if (order == "pop") {
                int num;
                int &pNum=num;
                if (s->pop(pNum)) cout << num << endl;
                else cout << -1 << endl;
            }
            else if (order== "size")
                cout << s->Size() << endl;
            else if (order == "empty") {
                if (s->empty()) cout << 1 << endl;
                else cout << 0 << endl;
            }
            else if (order == "top") {
                if (s->empty()) cout << -1 << endl;
                else cout << s->Top() << endl;
            }
            else {
                int x;
                x = stoi(order.erase(0,4));
                s->push(x);
            }
        }
        delete s;
    }


    STL을 배우기 전이라 스택 클래스를 직접 구현했습니다.


    스택은 제일 나중에 들어온 데이터가 먼저나가는 후입 선출 자료구조 입니다.

    스택에 들어 있는 데이터의 개수는 tos 변수를 통해 표현합니다.

    비어 있다면 tos 는 -1이고, 1개가 들어있다면 tos는 0 이 됩니다.


    0부터 시작하는 것을 주의 하시기 바랍니다.

    '알고리즘' 카테고리의 다른 글

    백준 1874 스택 수열 [C++]  (0) 2018.11.25
    백준 5639 이진 검색 트리 [C++]  (0) 2018.11.25
    백준 9012 괄호 [C++]  (0) 2018.11.25
    백준 1260 DFS와 BFS [C++]  (0) 2018.11.25
    백준 1991 트리 순회 [C++]  (0) 2018.11.25

    댓글

© 2018 TISTORY. All rights reserved.