물음표 살인마

[백준10828] 스택(stack)이란? 자바로 스택 구현하기 본문

개발지식/Algorithm

[백준10828] 스택(stack)이란? 자바로 스택 구현하기

응지권 2022. 8. 16. 23:16

스택이란?

한 쪽 끝에서만 자료를 넣고 뺄 수 있는 자료구조

마지막에 넣은 것이 가장 먼저 나오기 때문에 LIFO(Last In First Out) 이라고도 한다.

  • push: 스택에 자료를 넣는 연산
  • pop: 스택에서 자료를 빼는 연산
  • top: 스택의 가장 위에 있는 자료를 보는 연산
  • empty: 스택이 비어있는지 아닌지 확인하는 연산
  • size: 스택에 저장되어있는 자료의 개수를 알아보는 연산

 

Java로 스택 구현하기(백준 10828)

    int[] arr = new int[10000];
    int cur = 0;

자료를 넣을 배열과 스택의 

스택의 크기를 담을 변수를 선언해준다.

 

    void push(int x){
        arr[cur] = x;
        cur++;
    }

push: 배열에 입력된 자료를 저장하고

크기를 담은 변수를 1 늘려준다.

 

    int pop(){
        if(cur <= 0){
            return -1;
        }
        int result = arr[cur -1];
        arr[cur -1] = 0;
        cur--;
        return result;
    }

pop: 스택의 제일 마지막에 입력된 자료를 리턴해주고

크기를 담은 변수를 -1 해준다.

자료가 담겼던 배열의 자리는 0으로 초기화해준다.

스택에 담긴 자료가 없을시엔 -1을 반환한다.

 

int size(){
        return cur;
    }

size: 스택에 담긴 자료의 갯수를 반환한다.

 

    int empty(){
        return (cur <= 0) ? 1 : 0;
    }

empty: 스택이 비었으면 1을, 그렇지 않은 경우에는 0을 리턴한다.

 

int top(){
        return (cur <= 0) ? -1 : arr[cur - 1];
    }

top: 스택에 가장 마지막으로 입력된 자료를 반환한다.

스택에 아무 자료도 없을시엔 -1을 반환한다.

 

 

백준 문제 풀이를 위한 최종 코드

package stack;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Baekjoon10828 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        int x = Integer.parseInt(br.readLine());

        Stack stack = new Stack();

        for (int i = 0; i < x; i++) {
            st = new StringTokenizer(br.readLine(), " ");
            String fc = st.nextToken();

            switch (fc) {
                case "push":
                    stack.push(Integer.parseInt(st.nextToken()));
                    break;
                case "pop":
                    System.out.println(stack.pop());
                    break;
                case "size":
                    System.out.println(stack.size());
                    break;
                case "empty":
                    System.out.println(stack.empty());
                    break;
                case "top":
                    System.out.println(stack.top());
                    break;
            }
        }


    }
}

class Stack {
    int[] arr = new int[10000];
    int cur = 0;


    void push(int x){
        arr[cur] = x;
        cur++;
    }

    int pop(){
        if(cur <= 0){
            return -1;
        }
        int result = arr[cur -1];
        arr[cur -1] = 0;
        cur--;
        return result;
    }

    int size(){
        return cur;
    }

    int empty(){
        return (cur <= 0) ? 1 : 0;
    }

    int top(){
        return (cur <= 0) ? -1 : arr[cur - 1];
    }
}

 

Comments