Programing/백준, 프로그래머스(C++)

[C++][백준 10828] 스택

hye3193 2025. 1. 8. 13:51

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

 

제출 코드

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

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    int n;
    string method;
    vector<int> stack;
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        cin >> method;
        if (method == "push")
        {
            int a;
            cin >> a;
            stack.push_back(a);
        }
        else if (method == "pop")
        {
            if (stack.empty())
            {
                cout << "-1" << '\n';
                continue;
            }
            cout << stack[stack.size() - 1] << '\n';
            stack.erase(stack.begin() + stack.size() - 1);
        }
        else if (method == "size")
            cout << stack.size() << '\n';
        else if (method == "empty")
            cout << (stack.empty()) << '\n';
        else if (method == "top")
        {
            if (stack.empty())
            {
                cout << "-1" << '\n';
                continue;
            }
            cout << stack[stack.size() - 1] << '\n';
        }
    }
}

C++ STL 라이브러리에 stack이 존재하긴 하지만 vector로 구현해보았다

 

#include <iostream>
using namespace std;

class Stack
{
private:
    int *p_stack;
    int idx;

public:
    Stack(int n)
    {
        p_stack = new int[n];
        idx = -1;
    }
    void push(int x)
    {
        p_stack[++idx] = x;
    }
    int pop()
    {
        return (idx == -1) ? -1 : p_stack[idx--];
    }
    int size()
    {
        return idx + 1;
    }
    int empty()
    {
        return (idx == -1) ? 1 : 0;
    }
    int top()
    {
        return (idx == -1) ? -1 : p_stack[idx];
    }
};

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    int n;
    string method;
    cin >> n;
    Stack stack(n);
    while(n--)
    {
        cin >> method;
        if (method == "push")
        {
            int input;
            cin >> input;
            stack.push(input);
        }
        else if (method == "pop")
            cout << stack.pop() << '\n';
        else if (method == "size")
            cout << stack.size() << '\n';
        else if (method == "empty")
            cout << stack.empty() << '\n';
        else if (method == "top")
            cout << stack.top() << '\n';
    }
}

stack 클래스를 직접 구현한 코드

구현하면서 알게 되었는데, 0부터 올라가는 i 값이 딱히 필요 없는 상황이라면 그냥 n번 반복하기 위해 while(n--)를 사용해도 된다(n번 반복 후에 0이 되면 false가 되어 while문을 탈출)

'Programing > 백준, 프로그래머스(C++)' 카테고리의 다른 글

[C++][백준 11866] 요세푸스 문제 0  (0) 2025.01.08
[C++][백준 10845] 큐  (0) 2025.01.08
[C++][백준 10816] 숫자 카드2  (0) 2025.01.07
[C++][백준 9012] 괄호  (0) 2025.01.07
[C++][백준 2164] 카드2  (0) 2025.01.07