‡ CODING TEST STUDY ‡/º 백준

[백준 10828번 C++] 스택

Trudy | 송연 2023. 9. 8. 00:58

10828번: 스택 (acmicpc.net)

 

10828번: 스택

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

www.acmicpc.net

먼저 스택을 불러와주는 <stack> 헤더파일을 불러와줌

[C++][STL] Stack 기본 사용법 및 예제 (tistory.com)

 

[C++][STL] Stack 기본 사용법 및 예제

인트로 오늘은 C++의 STL중 하나인 Stack(스택) 기본 함수에 대해서 알아보도록 하겠습니다. 목차 1. 스택(Stack)이란? 2. 스택 헤더 파일 3. 스택 기본 함수 1. 스택이란? 스택(Stack)은 대표적인 LIFO(Last In

life-with-coding.tistory.com

이렇게 첫 코드를 작성했는 데,

첫번째 출력은 잘 나왔는데 

두번째 출력은 -1에서 멈춤

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

using namespace std;

int main()
{
    int n, p, pop;
    stack<int> stack;
    string s;
    
    cin >> n; 
    
    for(int i=0; i<n; i++){
        cin >> s;
        
        if(s== "push"){
            cin >> p;
            stack.push(p);
        }
        else if(s=="pop"){
            if(stack.empty()) cout << "-1\n";
            else{
                pop = stack.top();
                cout << pop << "\n";
                stack.pop();
            }
        }
        else if(s=="size"){
            cout << stack.size() << "\n";
        }
        else if(s=="empty"){
            cout << stack.empty() << "\n";
        }
        else if(s=="top"){
            cout << stack.top() << "\n";
        }    
    }

    return 0;
}

<stack>에서 empty()는 비어 있으면 true, 비어 있지 않으면 false를 반환함

top()은 가장 상단의 원소를 반환하기 때문에 사용하기 전에 empty()를 통해서 먼저 비어 있는 스택이 아닌지 확인해줘야 함

 

따라서 empty랑 top을 바꿔주니까 성공했다

 

성공한 코드는

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

using namespace std;

int main()
{
    int n, p, pop;
    stack<int> stack;
    string s;
    
    cin >> n; 
    
    for(int i=0; i<n; i++){
        cin >> s;
        
        if(s== "push"){
            cin >> p;
            stack.push(p);
        }
        else if(s=="pop"){
            if(stack.empty()) cout << "-1\n";
            else{
                pop = stack.top();
                cout << pop << "\n";
                stack.pop();
            }
        }
        else if(s=="size"){
            cout << stack.size() << "\n";
        }
        else if(s=="empty"){
            if(stack.empty() ) cout << "1\n";
            else cout<< "0\n";
        }
        else if(s=="top"){
            if(stack.empty()) cout << "-1\n";
            else cout << stack.top() << "\n";
        }    
    }

    return 0;
}

'‡ CODING TEST STUDY ‡ > º 백준' 카테고리의 다른 글

[백준 10773번 C++] 제로  (0) 2023.09.09
[백준 9012번 C++] 괄호  (0) 2023.09.09
[백준 17087번 C++] 숨바꼭질 6  (0) 2023.09.02
[백준 10974번 C++] 모든 순열  (0) 2023.09.01
[백준 2981번 C++] 검문  (0) 2023.09.01