승1's B(log n)

[백준 - C++] 10828번: 스택 본문

Problem Solving

[백준 - C++] 10828번: 스택

승1이 2022. 8. 14. 17:30

STL의 스택을 그냥 사용해서는 안되고, 조금의 변형이 필요한 듯 했다. 그러나 우리에겐 무적의 STL이 있다는 것을 기억해야 한다.

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

int main(void) {
    int N;
    scanf("%d", &N);	//몇 번 만큼 명령을 받을 지 입력 받음
    stack<int> st;	//스택 생성자
    for(int i = 0; i < N; i++)	//루프를 돌려서 명령의 횟수를 채움
    {
        string cmd;
        cin>> cmd;	//어떤 명령인지 string 형으로 입력 받기
        if(cmd == "push")	//push를 입력 받았을 때는 무엇을 push할 지 추가로 받게 설정
        {
            int m;
            scanf("%d", &m);
            st.push(m);	//입력받은 숫자를 스택에 push
        }
        else if(cmd == "pop"){	//만약 명령이 pop일 때
            if(st.empty())	//스택이 비어있으면 -1 출력
                printf("%d\n", -1);
            else{	//비어있지 않을 때
            printf("%d\n", st.top());	//스택의 맨 위 요소 출력
            st.pop();	//그리고 맨 위 요소 제거
            }
        }
        else if(cmd == "size")	//만약 명령이 size일 때
            printf("%d\n", static_cast<int>(st.size()));	//size함수를 이용해 출력, int 형으로 형변환 해주기
        else if(cmd == "empty")	//만약 명령이 empty일 때
            printf("%d\n", st.empty());	//empty 함수 사용해서 출럭
        else	//명령이 top일 때
        {
            if(st.empty())	//스택이 비어있는 경우 -1 출력
                printf("%d\n", -1);
            else	//그렇지 않으면 top 함수로 맨 위 요소 출력
            printf("%d\n", st.top());
        }
    }
    return 0;
}

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

 

10828번: 스택

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

www.acmicpc.net

 

Comments