본문 바로가기
Algorithm/백준

[백준] 10828번 : 스택 / c++

by 코딩친구 2020. 5. 22.
반응형

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

 

10828번: 스택

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

www.acmicpc.net

 

[ 코드 ]

 

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

using namespace std;
 
int main() {
    stack<int> S;
    int n;

    cin >> n;
    
    for (int i = 0; i < n; i++) {
        string str;
        cin >> str;
        if (str == "push") {
            int x; 
            cin >> x;
            S.push(x);
        }
        else if (str == "top") {
            if (S.empty())cout << "-1" << endl;
            else cout << S.top() << endl;
        }
        else if (str == "pop") {
            if (S.empty())cout << "-1" << endl;
            else {
                cout << S.top() << endl;
                S.pop();
            }
        }
        else if (str == "empty") {
            cout << S.empty() << endl;
        }
        else {
            cout << S.size() << endl;
        }
    }
    return 0;
}

 

스택에 대한 기본적인 이해를 하는 문제.

 

※ 스택이란?

한쪽 끝으로만 자료의 삽입, 삭제 작업이 이루어지는 자료구조.

LIFO (Last In First Out) 혹은 FILO (First In Last Out) 구조.

쉽게 말해, 한 쪽 끝이 막혀있는 통 구조같은 것을 생각하면 간단하다.

 

위 코드는 STL의  스택을 이용해 구현하였다.

#include<stack>을 통해 stack 라이브러리를 호출하는 것이다.

 

 

 

혹은 직접 구현하는 방법도 있다.

 

#include <iostream>
#include <string.h>

using namespace std;

int stack[10001], top = -1;

void push(int x){
    stack[++top] = x;
}
int empty() {
    if (top < 0)return 1;
    else return 0;
}
void pop() {
    if (empty() == 1)cout << "-1"<<"\n";
    else {
        cout << stack[top] << "\n";
        stack[top--] = 0;
    }
}
 
int main() {
    int n;
    cin >> n;
    for (int i = 0; i < n; i++) {
        char str[10];
        cin >> str;
        if (!strcmp(str, "push")) {
            int x; cin >> x;
            push(x);
        }
        else if (!strcmp(str, "top")) {//top()함수를 만들면 top 변수와 겹치기 때문에 만들지 않음
            if (empty() == 1)cout << "-1"<<"\n";
            else cout << stack[top] << "\n";
        }
        else if (!strcmp(str, "pop")) {
            pop();
        }
        else if (!strcmp(str, "empty")) {
            cout << empty() << "\n";
        }
        else {//empty()함수는 간단하기 때문에 함수를 만들지 않음
            cout << top + 1 << "\n";
        }
    }
    return 0;
}

 

이 방법은 다음 포스트에 더 자세히 나와있지만, c++을 쓰는 이상 추천하는 방법은 아니다.

https://coding-all.tistory.com/3

반응형