관리 메뉴

cococo-coding

[C++ 풀이] 10828번. 스택 본문

[BOJ] 코드 모음/C++_learning 문제집

[C++ 풀이] 10828번. 스택

_dani 2024. 1. 19. 02:05

문제

풀이

stack에 대한 기본개념과 명령어를 string으로 받아 각 조건에 따라 분기해서 풀어준다.

 

문제에서 제시한 명령은 push X, pop, size, empty, top 으로 총 5가지이다.

이 명령을 문자열 string str; 로 받아 각각 처리해줄 것이다.

 

1. push X (데이터 삽입)

X를 num으로 입력받고 s.push(num) 처리를 한다.

 

2. pop (데이터 삭제)

스택이 비어있다면 ( s.empty() ), -1을 출력한다.

아니라면 가장 위의 데이터를 반환한 후에, 이 데이터를 삭제한다.

s.top() -> s. pop()

 

3. size (스택사이즈)

스택의 사이즈를 출력한다. s.size()

 

4. empty (스택 확인)

위 2번에서 스택이 비어있는지 확인할 때도 이용한 함수이다.

스택이 비어있다면 -1을, 아니라면 가장 윗층의 데이터를 출력한다.

s.empty()로 여부를 확인한다.

 

5. top(가장 위의 데이터 반환)

마찬가지로 스택이 비어있다면( s.empty() ), -1을 반환하고

아니라면 s.top()으로 최상위 데이터를 반환한다. 

 

스택을 처음 이용하고, 기본 함수들을 활용해보기 좋은 문제이다. 

 

코드

#include <iostream>
#include <stack>
using namespace std;
/*
    1. n을 입력받는다.
    2. n만큼 명령을 입력받는다..
    3. 각 명령마다 출력을 한다.
*/

int main() {
    //1
    int n;
    cin >> n;
    //2
    stack <int> s;
    string str; //명령어 받을 변수
    //3
    while (n--) {
        cin >> str;
        if (str == "push") {
            int num;
            cin >> num;
            s.push(num);
        }
        else if (str == "pop") {
            if (s.empty()) cout << "-1" << '\n';
            else {
                cout << s.top() << '\n';
                s.pop();
            }
        }
        else if (str == "size") {
            cout << s.size() << '\n';
        }
        else if (str == "empty") {
            if (s.empty()) cout << "1" << '\n';
            else cout << "0" << '\n';
        } 
        else if (str == "top") {
            if (s.empty()) cout << "-1" << '\n';
            else cout << s.top() << '\n';
        }
    }
    return 0;
}