• toc {:toc}

문제

μ •μˆ˜λ₯Ό μ €μž₯ν•˜λŠ”Β μŠ€νƒμ„ κ΅¬ν˜„ν•œ λ‹€μŒ, μž…λ ₯으둜 μ£Όμ–΄μ§€λŠ” λͺ…령을 μ²˜λ¦¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

λͺ…령은 총 λ‹€μ„― 가지이닀.

  • push X: μ •μˆ˜ Xλ₯Ό μŠ€νƒμ— λ„£λŠ” 연산이닀.
  • pop: μŠ€νƒμ—μ„œ κ°€μž₯ μœ„μ— μžˆλŠ”Β μ •μˆ˜λ₯Ό λΉΌκ³ , κ·Έ 수λ₯Ό 좜λ ₯ν•œλ‹€. λ§Œμ•½ μŠ€νƒμ— λ“€μ–΄μžˆλŠ” μ •μˆ˜κ°€ μ—†λŠ” κ²½μš°μ—λŠ” -1을 좜λ ₯ν•œλ‹€.
  • size: μŠ€νƒμ— λ“€μ–΄μžˆλŠ” μ •μˆ˜μ˜ 개수λ₯Ό 좜λ ₯ν•œλ‹€.
  • empty: μŠ€νƒμ΄ λΉ„μ–΄μžˆμœΌλ©΄ 1, μ•„λ‹ˆλ©΄ 0을 좜λ ₯ν•œλ‹€.
  • top: μŠ€νƒμ˜ κ°€μž₯ μœ„μ— μžˆλŠ” μ •μˆ˜λ₯Ό 좜λ ₯ν•œλ‹€.Β λ§Œμ•½ μŠ€νƒμ— λ“€μ–΄μžˆλŠ” μ •μˆ˜κ°€ μ—†λŠ” κ²½μš°μ—λŠ” -1을 좜λ ₯ν•œλ‹€.

μž…λ ₯

첫째 쀄에 μ£Όμ–΄μ§€λŠ” λͺ…λ Ήμ˜ 수 N (1 ≀ N ≀ 10,000)이 μ£Όμ–΄μ§„λ‹€.Β λ‘˜μ§Έ 쀄뢀터 N개의 μ€„μ—λŠ” λͺ…령이 ν•˜λ‚˜μ”© μ£Όμ–΄μ§„λ‹€. μ£Όμ–΄μ§€λŠ” μ •μˆ˜λŠ” 1보닀 ν¬κ±°λ‚˜ κ°™κ³ , 100,000보닀 μž‘κ±°λ‚˜ κ°™λ‹€. λ¬Έμ œμ— λ‚˜μ™€μžˆμ§€ μ•Šμ€ λͺ…령이 μ£Όμ–΄μ§€λŠ” κ²½μš°λŠ” μ—†λ‹€.

좜λ ₯

좜λ ₯ν•΄μ•Όν•˜λŠ” λͺ…령이 μ£Όμ–΄μ§ˆ λ•Œλ§ˆλ‹€, ν•œ 쀄에 ν•˜λ‚˜μ”© 좜λ ₯ν•œλ‹€.

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

풀이

STL Stack, λ°°μ—΄λ‘œ λ§Œλ“  μŠ€νƒμœΌλ‘œ κ΅¬ν˜„ν•΄λ΄„.

// Stl Stack 
// 10828_Stack_standard.cpp
#include <bits/stdc++.h>
 
using namespace std;
 
int main(){
    stack<int> s;
    int N;
    cin >> N;
    while(N--){
        string str;
        cin >> str;
        if(str == "push"){
            int p;
            cin >> p;
            s.push(p);
        }
        else if(str == "pop"){
            if(s.empty())   cout << -1 << endl;
            else{
                cout << s.top() << endl;
                s.pop();
            }
        }
        else if(str == "size"){
            cout << s.size() << endl;
        }
            
        else if(str == "empty"){
            if(s.empty()){
                cout << 1 << endl;
            }
            else{
                cout << 0 << endl;
            }
        }
        else if(str == "top"){
            if(s.empty()) cout << -1 << endl;
            else cout << s.top() << endl;
        }
    }
    return 0;
}
// Stack using array 
// 10828_Stack_fraud.cpp
#include <bits/stdc++.h>
 
using namespace std;
 
const int MX = 1000005;
int dat[MX];
int pos = 0;
 
void push(int x){
    dat[pos++] = x;
}
 
int pop(){
    if(pos > 0){
        pos--;
        return dat[pos];
    }
    return -1;
}
 
int size(){
    return pos;
}
 
bool empty(){
    if(pos == 0){
        return 1;
    }
    return 0;
}
 
int top(){
    if(pos == 0) return -1;
    return dat[pos-1];
}
 
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    int n;
    cin >> n;
    string str;
    int p;
    while(n--){
        cin >> str;
        if(str == "push"){
            cin >> p;
            push(p);
        }
        else if(str == "pop")
            cout << pop() << endl;
        else if(str == "size")
            cout << size() << endl;
        else if(str == "empty")
            cout << empty() << endl;
        else if(str == "top")
            cout << top() << endl;
    }
    return 0;
}