본문 바로가기
🧑‍💻코딩 테스트/백준 (BOJ)

[백준 알고리즘/ C++] BOJ.10828 스택

by 코코의 주인 2022. 1. 30.

 


풀이

자료구조

- int stack[] : 스택을 구현하기 위한 배열

- int top : top의 역할을 하는 변수

- int data : 입력 값

- int num : 테스트 입력 수를 저장하는 변수

- int count : 실행횟수 세기 위한 변수

 

알고리즘

- 스택

- 자료구조

 

 

코드

- C++은 string이라는 문자열을 처리하기에 유리한 변수가 있기 때문에 사용

- 문자열끼리 비교할 때는 compare() 함수 사용


코드 

#include <iostream>
#include <string>
using namespace std;
#define STACK_SIZE 10000

int stack[STACK_SIZE];  //STACK_SIZE 만큼의 int형 배열
int top = -1;  //top 선언 및 초기화

int isEmpty() {  //스택이 비어있는지 확인
    if(top < 0) {
        return 1;
    }
    else {
        return 0;
    }
}

int isFull() {  //스택이 꽉 차있는지 확인
    if (top == STACK_SIZE - 1) {
        return 1;
    }
    else {
        return 0;
    }
}

void Push(int input) {  //스택에 데이터를 삽입하는 함수
    if(!isFull()) {  //스택이 꽉 차있는지 확인
        top++;  //top을 증가
        stack[top] = input;  //데이터 삽입
    }
    else {
        cout << "Stack is Full\n";
    }
}

int Pop() {  //스택에서 데이터를 삭제하는 함수
    int data;
    if(isEmpty()) {  //스택이 비어있는지 확인
        data = -1;
    }
    else {
        data = stack[top];
        stack[top] = 0;  //스택의 가장 끝 데이터를 0으로 초기화
        top--;  //top 감소
    }
    return data;
}

int printtop() {  //top을 출력
    int data = 0;
    if(isEmpty()) {
        return -1;
    }
    else {
        data = stack[top];
    }
    return data;
}

int main() {

    string command;
    int num = 0;
    int input = 0;
    int count = 0;

    cin >> num;

    while(count < num) {

        cin >> command;
        if(!command.compare("push")) {
            cin >> input;
            Push(input);
            count++;
        }

        else if(!command.compare("pop")) {
            cout << Pop() << "\n";
            count++;
        }

        else if(!command.compare("top")) {
            cout << printtop() << "\n";
            count++;
        }

        else if(!command.compare("size")) {
            cout << top + 1<< "\n";
            count++;
        }

        else if (!command.compare("empty")) {
            cout << isEmpty() << "\n";
            count++;
        }
    }
    return 0;
}

 


총평

이 블로그에 써뒀던 스택 관련된 글의 코드를 살짝 수정했다.

https://cocoiscat.tistory.com/32

 

[자료구조/C++] 스택(Stack)

스택이란? 인터넷을 돌아다니다 보면 "업보 스택 쌓는다"라는 말을 들을 수 있을 것이다. 무언가 잘못을 해서 업보를 차곡차곡 쌓는다는 뜻인데, 나중에 이를 그대로 돌려받을 때 "업보 청산" 한

cocoiscat.tistory.com

스택에 대해 설명도 열심히 써뒀으니 읽어보면 도움이 될 거라고 생각한다.

댓글