스택(Stack)은 데이터를 저장하고 관리하는 자료구조 중 하나로, 후입선출(LIFO) 원칙에 따라 동작한다. 자바에서는 이러한 스택을 손쉽게 활용할 수 있도록 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 클래스의 메소드를 잘 이해하면, 코드 작성 및 디버깅 과정에서 도움이 될 것이다.
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)