자료구조 - Stack?

이재명·2024년 2월 19일

스택(Stack) 이해하기

스택(Stack)은 데이터를 저장하고 관리하는 자료구조 중 하나로, 후입선출(LIFO) 원칙에 따라 동작한다. 자바에서는 이러한 스택을 손쉽게 활용할 수 있도록 java.util.Stack 클래스를 제공한다. 이 클래스를 이용하여 데이터를 효율적으로 관리할 수 있다.

스택의 기본 동작

스택은 데이터를 쌓아 올리는 구조로, 가장 최근에 추가된 요소가 가장 먼저 제거된다. 이러한 특성은 다양한 상황에서 유용하게 활용된다. 예를 들어, 메소드 호출 정보를 추적하거나 괄호의 쌍을 확인하는 등 다양한 애플리케이션에서 스택은 중요한 역할을 한다.

java.util.Stack 클래스 활용

자바에서는 스택을 쉽게 구현할 수 있도록 java.util.Stack 클래스를 제공한다. 아래는 간단한 사용 예시:

import java.util.Stack;

public class StackExample {
    public static void main(String[] args) {
        // 스택 생성
        Stack<String> stack = new Stack<>();

        // 요소 추가
        stack.push("Java");
        stack.push("is");
        stack.push("fun!");

        // 요소 제거
        String poppedElement = stack.pop();
        System.out.println("Popped Element: " + poppedElement);

        // 스택 상단 확인
        String topElement = stack.peek();
        System.out.println("Top Element: " + topElement);

        // 스택이 비어있는지 확인
        boolean isEmpty = stack.isEmpty();
        System.out.println("Is Stack Empty? " + isEmpty);
    }
}

예제에서는 push 메소드로 요소를 추가하고, pop 메소드로 최근에 추가된 요소를 제거한다. peek 메소드는 현재 스택 상단의 요소를 확인하며, isEmpty 메소드로 스택이 비어있는지 여부를 확인할 수 있다.

Stack 클래스를 이용하면?

스택을 간편하게 구현하고 활용할 수 있다. 이를 통해 데이터를 효율적으로 관리하고, 다양한 애플리케이션에서 유용하게 활용할 수 있다. 스택의 기본 동작 및 Stack 클래스의 메소드를 잘 이해하면, 코드 작성 및 디버깅 과정에서 도움이 될 것이다.

백준 25556 포스택

import java.util.Stack;
import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n;
        String str_tmp;
        String[] str = {};
        Stack<Integer> stack1 = new Stack<>();
        Stack<Integer> stack2 = new Stack<>();
        Stack<Integer> stack3 = new Stack<>();
        Stack<Integer> stack4 = new Stack<>();
        int result = 1;
        
        n = Integer.parseInt(sc.nextLine());
        str_tmp = sc.nextLine();
        str = str_tmp.split(" ");
        
     
        for(int i = 0; i < n; i++){
            if(stack1.empty()||stack1.peek() < Integer.parseInt(str[i])){
                stack1.push(Integer.parseInt(str[i]));
            }
            else if(stack2.empty()||stack2.peek() < Integer.parseInt(str[i])){
                stack2.push(Integer.parseInt(str[i]));
            }
            else if(stack3.empty()||stack3.peek() < Integer.parseInt(str[i])){
                stack3.push(Integer.parseInt(str[i]));
            }
            else if(stack4.empty()||stack4.peek() < Integer.parseInt(str[i])){
                stack4.push(Integer.parseInt(str[i]));
            }else{  
                result = 0;
            }
        }
        
        if(result == 0){
            System.out.println("NO");
        }else{
            System.out.println("YES");
        }
        
    }
}

입력 받기: 사용자로부터 수열의 길이와 수열을 입력는다.
스택 활용: 네 개의 스택을 사용하여 수열을 정렬하고, 스택이 비어있거나 스택의 최상단 값보다 작은 값이 들어오면 해당 스택에 값을 추가한다.
결과 출력: 스택에 값이 정렬되어 추가될 수 있는 경우 "YES"를 출력하고, 그렇지 않은 경우 "NO"를 출력한다.

추천 게시글
https://velog.io/@zdlwoaud/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-Queue-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4%EC%9D%98-%EC%9D%B4%ED%95%B4-%EB%B0%8F-%EC%82%AC%EC%9A%A9%EB%B2%95
(자바 자료구조 Queue)

profile
__개발자가 되어야 한다.

0개의 댓글