본문 바로가기

Java 개념정리

[Java] Stack

Stack이란?

: 후입선출(Last In Frist Out(LIFO)) 자료구조 ( → 말 그대로 마지막에 들어온 데이터가 가장 먼저 나가는 자료구조)

주로 데이터가 입력된 순서의 역순으로 처리되어야 할 때 사용된다.

 

* Stack 선언

: Stack<object> stack = new Stack<>();

object부분에는 String, Integer, Character 등 다양하게 사용 가능


Stack의 메소드(Push, Pop, Peek, Empty, Size, Contains)

1. 데이터 추가(Push)

: .push()를 이용하여 데이터를 추가할 수 있다. 아래에서부터 데이터를 차곡차곡 쌓는다고 생각하면 된다.

import java.util.Stack;

public class Main {
    public static void main(String args[]){

        Stack<String> stack = new Stack<>();

        stack.push("Data1");
        stack.push("Data2");
        stack.push("Data3");
        stack.push("Data4");
    }
}

 

<위 코드를 그림으로 표현한 것 - 데이터가 아래에서부터 차곡차곡 쌓이는 것을 알 수 있다.>

 

 

2. 데이터 꺼내기(Pop)

: Pop()을 이용하여 데이터를 꺼낼 수 있다. 맨 위의 데이터부터 하나씩 빼낸다고 생각하면 된다.

* 만약 데이터가 없는 상태에서 Pop()을 실시하면 EmptyStackException 에러 발생

import java.util.Stack;

public class Main {
    public static void main(String args[]){

        Stack<String> stack = new Stack<>();

        stack.push("Data1");
        stack.push("Data2");
        stack.push("Data3");
        stack.push("Data4");

        System.out.println(stack); // [Data1, Data2, Data3, Data4]로 들어있는 상태.  Data1이 가장 밑, Data4가 가장 위에 위치

        stack.pop(); // pop을 실행했을 때, 가장 위에 있는 Data4가 제거되며 남은 데이터는 [Data1, Data2, Data3]
        stack.pop(); // pop을 실행했을 때, 가장 위에 있는 Data3가 제거되며 남은 데이터는 [Data1, Data2]
        stack.pop(); // pop을 실행했을 때, 가장 위에 있는 Data2가 제거되며 남은 데이터는 [Data1]
        stack.pop();// pop을 실행했을 때, 가장 위에 있는 Data1이 제거되며 남은 데이터는 [] (없다)
        stack.pop(); // 만약 stack에 아무 데이터가 없는 상태에서 Pop을 한다면? → EmptyStackException 에러 발생
        
    }
}

 

<위 코드를 그림으로 표현한 것 - 위에있는 데이터부터 빠지는 것을 알 수 있다.>

 

3. 가장 마지막에 들어간 데이터 확인(Peek)

: 가장 마지막에 있는 데이터(제일 위에 있는 값)을 확인하고 싶다. 라고 할때는 Peek()를 사용한다.

import java.util.Stack;

public class Main {
    public static void main(String args[]){

        Stack<String> stack = new Stack<>();

        stack.push("Data1");
        stack.push("Data2");
        stack.push("Data3");
        stack.push("Data4");

        System.out.println(stack); // [Data1, Data2, Data3, Data4]로 들어있는 상태.  Data1이 가장 밑, Data4가 가장 위에 위치

        System.out.println(stack.peek()); // 결과 값 : Data4(가장 위의 Data4를 출력해줌)
        stack.pop();// pop을 실행했을 때, 가장 위에 있는 Data4가 제거되며 남은 데이터는 [Data1, Data2, Data3]
        System.out.println(stack.peek()); // 결과 값 : Data3(가장 위의 Data3를 출력해줌)

    }
}

 

<위 코드를 그림으로 표현한 것 - 가장 위에있는 데이터를 출력 해 주는 것을 알 수 있다.>

4. Stack의 사이즈 확인 (Size)

: 현재  Stack에 들어가 있는 데이터의 개수를 확인한다.

import java.util.Stack;

public class Main {
    public static void main(String args[]){

        Stack<String> stack = new Stack<>();

        stack.push("Data1");
        stack.push("Data2");
        stack.push("Data3");
        stack.push("Data4");

        System.out.println(stack.size());  // 결과 값 : 4

    }
}

 

5. Stack에 특정 값이 들어가 있는지 확인(Contains)

: stack.contains(찾고자 하는 값); 으로 사용한다. 찾는 값이 존재하면 True, 존재하지 않는다면 False를 반환한다.

import java.util.Stack;

public class Main {
    public static void main(String args[]){

        Stack<String> stack = new Stack<>();

        stack.push("Data1");
        stack.push("Data2");
        stack.push("Data3");
        stack.push("Data4");

        System.out.println(stack.contains("Data1")); // 결과 값 : true(Data1이 stack안에 들어있음)
        System.out.println(stack.contains("Data5")); // 결과 값 : false(Data5는 stack안에 들어있지 않음)

    }
}

 

6.Stack이 비어있는지 확인(Empty)

:Stack이 비어있다면(데이터가 존재하지 않는다면) True, 그렇지 않다면 False를 반환한다.

import java.util.Stack;

public class Main {
    public static void main(String args[]){

        Stack<String> stack = new Stack<>();

        stack.push("Data1");
        stack.push("Data2");
        stack.push("Data3");
        stack.push("Data4");

        System.out.println(stack.empty()); // 결과 값 : false(데이터가 존재)

        stack.pop();
        stack.pop();
        stack.pop();
        stack.pop();

        System.out.println(stack.empty()); // 결과 값 : true(데이터가 존재하지 않음)

    }
}

 


출처 : Stack (Java Platform SE 7 ) (oracle.com)

 

Java Platform SE 7

 

docs.oracle.com


Stack 활용 문제

[백준] 문제번호 4949 (균형잡힌 세상)(java) (tistory.com)

 

[백준] 문제번호 4949 (균형잡힌 세상)(java)

<문제 4949 - 균형잡힌 세상> [문제] [답안] import java.io.*; import java.util.Stack; public class Main { public static void main(String args[]) throws IOException { BufferedReader br = new BufferedR..

rimmee97.tistory.com

 

'Java 개념정리' 카테고리의 다른 글

[Java] 트리(Tree)  (0) 2022.10.12
[Java] Queue  (0) 2022.10.04
[java] Dynamic Programming(DP / 동적 계획법)  (0) 2022.09.27
[java] String 클래스  (0) 2022.08.20
[Java] 변수  (0) 2022.08.17