반응형

안녕하세요, 츄르 사려고 코딩하는 집사! 코집사입니다.

[백준 알고리즘/BOJ] 10828번 스택 C++ 문제입니다.

 

 

1. 문제

정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.

명령은 총 다섯 가지이다.

  • push X: 정수 X를 스택에 넣는 연산이다.
  • pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • size: 스택에 들어있는 정수의 개수를 출력한다.
  • empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
  • top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.

 

 

2. 입력

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

 

 

<예제 입력>

14

push 1

push 2

top

size

empty

pop

pop

pop

size

empty

pop

push 3

empty

top

 

 

3. 출력

출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.

 

<예제 출력>

2

2

0

2

1

-1

0

1

-1

0

3

 

 

4. 문제 풀이

C++의 STL 라이브러리를 사용하면 된다.
앞의 push, pop 등은 string 형의 str 변수에 저장하여 if문을 통해서 stack 명령을 동작시키면 된다.

 

 

5. 소스 코드

#include 
#include 

using namespace std;

int main()
{
    int N; // 명령의 수
    cin >> N;
    string str;
    stack st;
    for (int i = 0; i < N; i++)
    {
        cin >> str;

        if (str == "push")
        {
            int number;
            cin >> number;

            st.push(number);
        }

        else if (str == "pop")
        {
            if (!st.empty())
            {
                cout << st.top() << endl;
                st.pop();
            }
            else cout << "-1" << endl;
        }
        else if (str == "size")
        {
            cout << st.size() << endl;
        }
        else if (str == "empty")
        {
            if (st.empty())
            {
                cout << 1 << endl;
            }
            else cout << 0 << endl;
        }
        else if (str == "top")
        {
            if (st.empty())
            {
                cout << -1 << endl;
            }
            else cout << st.top() << endl;
        }
    }
}



 

6. 결과

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기