궤도

[백준] 10828번 : 스택 본문

💻 현생/⛓ 알고리즘

[백준] 10828번 : 스택

영이오 2021. 3. 25. 18:41

문제

 


본문

 

과거 자료구조 수업시간에 C로 스택을 하나하나 정성스레 구현하던 때가 떠오른다.

그때 C++을 잘 모르던 때인데 다행이라고 생각한다.

만약 알고 있었다면 한줄로 해결할 수 있는걸 하나하나 작성하느라 홧병이 나서 죽었을 테니까...

 

C++의 표준 템플릿 라이브러리(STL)중에는 스택이 있다.

그전에 스택이 뭔지 모를 수 있으니 간략히 설명하면 LIFO(Last In First Out) 형식의 자료구조이다.

 

이 문제는 스택의 기본 사용법을 배우는 그런 문제라고 볼 수 있겠다.

 

www.cplusplus.com/reference/stack/stack/?kw=stack

 

stack - C++ Reference

container_typeThe second template parameter (Container)Type of the underlying container

www.cplusplus.com


소스코드

 

#include <iostream>
#include <stack>
#include <string>

using namespace std;

int main() {
    int N, num;
    string input;
    stack<int> stack;

    cin >> N;
    for (int i = 0; i < N; i++) {
        cin >> input;
        if (input.compare("push") == 0) {
            cin >> num;
            stack.push(num);
        } else if (input.compare("pop") == 0) {
            if (stack.empty())
                num = -1;
            else {
                num = stack.top();
                stack.pop();
            }
            cout << num << '\n';
        } else if (input.compare("size") == 0)
            cout << stack.size() << '\n';
        else if (input.compare("empty") == 0)
            cout << stack.empty() << '\n';
        else if (input.compare("top") == 0) {
            if (stack.empty())
                cout << -1 << '\n';
            else {
                cout << stack.top() << '\n';
            }
        }
    }
}

전체 소스코드다.

추가적으로 간단하게 C++의 스택 사용법만 정리하겠다.

 

#include <stack> //스택을 사용하기 위한 헤더
stack<int> s //int형 스택 s선언

s.push(1) //스택 s에 1투입
s.pop() //스택 s에서 가장 위에 있는 값을 뺌
s.top() //스택 s에서 가장 위에 있는 값을 반환
s.size() //스택 s의 크기 반환
s.empty() //스택 s가 비어있는지 아닌지 확인
Comments