티스토리 뷰

https://www.acmicpc.net/problem/10828

 

10828번: 스택

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 �

www.acmicpc.net

스택 C++

배열로 만든 스택

기본 자료구조

..진짜 말할게 이것뿐..

 

C++에서 문자열 다루는거랑 동적할당,벡터 쓰는게 익숙하지 않다.

그래서 쉬운문제여도 문자열을 다뤄야 하면 자바나 파이썬을 쓰게 되고

벡터는 아직도 익숙해지지가 않아서 찾아가면서 하는데

좀 더 많이 쓰려고 노력해야겠다. 부족한 부분을 찾아가는 유익한 문제풀이 시간~

 

소스코드

#include <iostream>
#include <cstring>
using namespace std;

class Stack{
public:
    int size;
    int* stack;
    Stack(){
        size = 0;
        stack = new int[10000];
    }
    void push(int n){
        stack[size++] = n;
    }
    int pop(){
        if(isEmpty()){
            return -1;
        }
        else{
            return stack[--size];
        }
    }
    int getSize(){
        return size;
    }
    bool isEmpty(){
        if(size == 0)
            return true;
        else
            return false;
    }
    int top(){
        if(isEmpty()){
            return -1;
        }
        else{
            return stack[size-1];
        }
    }
};
int main(){
    Stack s = Stack();
    int n,x;
    cin >> n;
    string com;
    for(int i = 0 ; i < n ; i++){
        cin >> com;
        if(com.compare("push") == 0){
            cin >> x;
            s.push(x);
        }else if(com.compare("pop") == 0){
            cout << s.pop() << "\n";
        }else if(com.compare("size") == 0){
            cout << s.getSize() << "\n";
        }else if (com.compare("empty") == 0){
            cout << (int)s.isEmpty() << "\n";
        }else if(com.compare("top") == 0){
            cout << s.top() << "\n";
        }
    }
    return 0;
}
댓글
댓글쓰기 폼