A ship in harbor is safe, but that is not what ships are built for.

코테 준비/Baekjoon Algorithm

[백준(BOJ)] 10828번 C++ 풀이

플리피나리 2022. 2. 27. 21:55
반응형

stack을 구현하라는 문제인데 C++은 STL에서 stack이 구현되어있다. 그래서 그냥 구현되어있는 stack을 이용하겠다. 그전에 내용을 간단히 정리하자.

 

<스택이란?>

스택(stack)은 LIFO(Last In First Out)의 자료구조이다. 제일 마지막에 넣은 데이터가 처음으로 나오는 알고리즘으로 기본적으로 push와 pop 으로 동작한다. 이때 push는 stack의 최상단에 자료를 넣고, pop은 stack의 최상단 자료를 추출한다.

<스택 헤더 파일>

stack STL을 사용하기 위해 #include <stack> 헤더파일을 포함해야 한다. 이후 " stack<데이터타입> 스택명; " 으로 stack을 선언한다.

 

 

<스택 기본 함수>

 1. 데이터 추가 : 스택명.push(넣을 데이터) 형태로 데이터를 추가한다.

stack.push(data);

 

 2. 데이터 삭제 : 스택명.pop(뺄 데이터) 형태로 최상위 데이터를 삭제한다.

stack.pop();

 

 3. 최상위 데이터 반환 : 스택명.top() 형태로 최상위 데이터를 반환한다.

stack.top();

 

 4. 스택 사이즈 반환 : 스택명.size() 형태로 스택의 현재 사이즈를 반환한다.

stack.size();

 

 5. 스택이 비어있는 지 확인 : 스택명.empty() 형태로 스택이 비어있는 지 확인한다. 비어있을 경우 true, 그렇지 않으면 false를 반환한다.

stack.empty();

 

 6. 두 스택의 내용 바꾸기 : 스택명1.swap(스택명2) 형태로 두 스택의 내용을 바꾼다.

stack1.swap(stack2);

 

 

<코드>

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

using namespace std;

int main()
{
    int n;
    cin >> n;
    
    stack<int> stk;
    string str;
    
    if(n<1 || n>10000)
        return 0;
        
    for(int i=0; i<n; i++){
        cin >> str;
        
        if(str == "push") {
            
            int num=0;
            cin >> num;
            stk.push(num);
            
        } else if(str == "pop"){
            
            if(stk.empty()){
                
                cout << "-1" << endl;
                
            } else {
                
                cout << stk.top() << endl;
                stk.pop();
                
            }
            
        } else if(str == "size"){
            
            cout << stk.size() <<endl;
            
        } else if(str == "empty"){
            
            if(stk.empty()){
                
                cout << "1" << endl;
                
            } else {
                
                cout << "0" << endl;
                
            }
            
        } else if(str == "top"){
            
            if(stk.empty()){
                
                cout << "-1" << endl;
                
            } else {
                
                cout << stk.top() << endl;
                
            }
        }
    }

    return 0;
}

 

C++을 사용하면 위와 같이 간단하게 해견되지만 C로 구현 시 stack을 구조체로 정의하고 모든 동작을 메소드로 구현해야한다. 그런면에서 C++이 편리하지만 스택의 동작 자체를 자세히 이해하기 위해서 C로 직접 구현해보는 것도 좋을 것 같다.

반응형