hayu's 개발 일지

99클럽 코테 스터디 7일차 TIL + Stack 메서드 본문

자료구조&알고리즘

99클럽 코테 스터디 7일차 TIL + Stack 메서드

hayu00 2024. 5. 27. 21:02

학습 키워드

- Stack

 

공부한 내용

Stack 사용(메서드)

  • 자바는 java.util.Stack클래스를 통해 Stack(스택) 동작을 제공하고 있다.
  • 일반적으로 스택에 데이터를 추가하는 동작은 push라고 하며 스택에서 데이터를 빼는 동작은 pop이라고 한다.
import java.util.Stack;

Stack 요소 넣기 - push()

Stack<Number> stack = new Stack<>();
        stack.push(1);
        stack.push(2);
        stack.push(3);

        System.out.println(stack); 
        // 출력 : [1, 2, 3]

Stack 요소 꺼내기 - pop()

  • Stack은 나중에 넣은것이 먼저 나오는 LIFO(Last In First Out) 구조이기 때문에 넣은 순서와 반대로 꺼내지게 된다.
System.out.println(stack.pop()); // 3

        System.out.println(stack); // [1, 2]

        System.out.println(stack.pop()); // 2
        System.out.println(stack.pop()); // 1

        System.out.println(stack); // []

Stack 최상단 요소 가져오기 - peek()

  • 스택에 들어있는 요소들 중, 최상단 값을 확인 만하고 스택에서 제거하고 싶지 않은 경우 peek() 메서드를 호출하면, 스택의 최상단(Top)에 있는 데이터를 확인만하고 스택에서 제거하지 않게 된다.
Stack<Number> stack01 = new Stack<>();
        stack01.push(1);
        stack01.push(2);
        stack01.push(3);

// 마지막에 넣은 값만 확인하고 제거하지는 않는다
        System.out.println(stack01.peek()); // 3

        System.out.println(stack01); // [1, 2, 3]

Stack 공간 비어있는지 확인 - isEmpty()

  • 스택에 데이터가 존재하지 않는 상황에서, pop이나 peek을 하게 되면 EmptyStackException 예외가 발생하게 된다. 그러므로 항상 메서드 호출 시에 스택에 데이터가 존재하는지 확인해야 한다.
Stack<Number> stack2 = new Stack<>();
        stack2.push(1);

// 스택이 비어있지 않다면 안전하게 요소를 제거
        if(!stack2.isEmpty()){
            stack2.pop();
        }

Stack 요소 위치 확인 - search()

  • 스택에특정 데이터가 존재하는지 확인하기 위해 search() 메서드를 사용할 수 있다. 이는 리스트의 indexOf() 메서드와 비슷하다. 데이터가 존재하면 순서를 반환하고 존재하지 않으면 -1을 반환한다.
  Stack<String> stack3 = new Stack<>();
        stack3.push("HI");
        stack3.push("HELLO");
        stack3.push("HAHA");
        stack3.push("STUDY");
        stack3.push("WOW");

        System.out.println(stack3); // [HI, HELLO, HAHA, STUDY, WOW]

// 이때의 인덱스는 배열처럼 0부터 시작하는 기준이 아닌, 몇번째로 꺼내지는지에 대한 인덱스 표시이다.
        System.out.println(stack3.search("WOW")); // 1 → 첫번째로 꺼내질 것임
        System.out.println(stack3.search("HI")); // 5

Stack 사이즈 - size()

  • Stack 클래스는 Vector 클래스를 상속받았다. Vector 클래스는 List 인터페이스를 구현하므로 size() 메서드를 사용할 수 있다.
Stack<Number> stack4 = new Stack<>();
        stack4.push(1);
        stack4.push(2);
        stack4.push(3);
        stack4.push(4);

        System.out.println(stack4.size()); // 4

 

회고

발생한 문제

- 저번에 스택에 대한 공부를 했는데 사용 메서드에 대한 공부가 부족하다고 생각했다. 

- 코딩 문제를 푸는 중, 스택에 대한 공부와 관련 메서드를 공부하면 좋을 것 같다는 생각을 했다.

 

해결 방법

- 스택에 대한 메서드를 공부했다.

 

알게된 내용

- 스택에 대한 메서드들을 알게 되었고, 예시 코드를 정리하여 이해를 할 수 있었다.

 

 

참고 자료

- https://ittrue.tistory.com/200

- https://kwin0825.tistory.com/156