[Coding Test] 백준 JAVA 25556 포스택 - 스택

LeeSeungEun·2023년 5월 9일
0

Coding Test

목록 보기
1/38

1. 문제

2. Code

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

class p25556 {
    public static void solution() {
        Scanner scanner = new Scanner(System.in);
        int numberCount = scanner.nextInt();
        if (! (numberCount >= 1 && numberCount<=100000)){
            return;
        }
        scanner.nextLine(); // nextInt 후 개행 문자(엔터)를 처리하기 위해
        String number = scanner.nextLine(); // number = 1 2 3 4
        String[] tokens = number.split(" "); // tokens = {"1", "2", "3", "4"}
        // System.out.println(Arrays.toString(tokens)); // [1, 2, 3, 4] 문자형
        int[] arr = new int[tokens.length];
        for (int i = 0; i < tokens.length; i++) {
            arr[i] = Integer.parseInt(tokens[i]); // [1, 2, 3, 4] 숫자 형
        }
        // System.out.println(Arrays.toString(arr));
        Stack[] stacks = new Stack[4];
        for (int i = 0; i < 4; i++)
            stacks[i] = new Stack<Integer>(); // stacks[i] 단독으로는 사용 할 수 없음 (null 값으로 초기화되어 있기 떄문에, 요소에 값을 할당하지 않은 상태에서는 해당 요소에 접근할 수 없다)
        int idx = 0;
        for (int i = 0; i < numberCount; i++) {
            int target = arr[i];
            boolean flag = false;
            for (int j = 0; j < 4; j++) {
                if (stacks[j].isEmpty()) {
                    flag = true;
                    push(stacks[j], target);
                    break;
                } else if (target > (Integer) stacks[j].peek()) {
                    flag = true;
                    push(stacks[j], target);
                    break;
                }
            }
            if (!flag) {
                System.out.println("NO");
                return;
            }
        }
        System.out.println("YES");
    }

    public static boolean push(Stack stacks, int target) {
        stacks.push(target);
        return true;
    }

    public static void main(String[] args) {
        solution();
    }
}

3. 풀이

  • push를 하기 이전에 stack의 최상단의 값이 넣으려는 값보다 작다면 다른 stack에 넣어야 한다
  • 모든 수를 스택에 넣을 수 있다면 굳이 pop 하지 않더라도 성공한다.

4. 링크

https://www.acmicpc.net/problem/25556

0개의 댓글