코딩테스트/백준

[Java][백준 25556번] : 포스택

블로그 주인장 2023. 8. 8.

목차


    📢 문제 출처

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

     

    25556번: 포스택

    포닉스가 순열을 청소할 수 있으면 YES, 불가능하다면 NO를 출력한다.

    www.acmicpc.net

     


    ⏰ 문제 설명


    ⏰ 다른 풀이


    ⏰ 입출력 예시


    ⏰ 풀이

    import java.util.*;
    
    public class Main {
    
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            ArrayList<Integer> li = new ArrayList<>();
    
            int n = sc.nextInt();
            //값을 넣어준다.
            for (int i = 0; i < n; i++) {
                li.add(sc.nextInt());       //n의 갯수대로 값을 넣는다.
            }
            String[] elements = sc.nextLine().split(" ");
    
            // Integer형 스택 선언
            Stack<Integer>[] stackInt = new Stack[4];
            //4개의 스택 삽입
            for (int i = 0; i < 4; i++) {
                stackInt[i] = new Stack<>();
                stackInt[i].push(0); //비교를 위해서 가장 작은 수인 '0'을 넣는다.
            }
    
            //list의 사이즈만큼 반복문 설정
            for (int i = 0; i < n; i++) {
                boolean bFlag = false;
    
                //StackList 갯수만큼 반복
                for (int j = 0; j < 4; j++) {
                    if(stackInt[j].peek() < li.get(i))  //스택 맨 위에 것을 꺼냈을 때 스택에 있는 것보다 크면 저장
                    {
                        stackInt[j].push(li.get(i));    //ArrayList의 (i)번째 인덱스를 Get한다.
                        bFlag = true;
                        break;
                    }
                }
                if(!bFlag) {
                    System.out.println("NO");
                    return;
                }
            }
            System.out.println("YES");
        }
    }
    • 값을 담은 후에 다음 값이 이전 값보다 크면 같은 스택에, 작은 값이라면 다른 스택에 담는다.
    • 예를 들어 첫 번째 스택에 4를 넣고, 두 번째 스택에 3를 넣었는데, 그 다음 값이 3보다 큰 6이기 때문에 첫 스택 위치로 돌아가서 조건을 다시 처리한다.

    📈 값의 출력 풀이

    1.  첫 번째 스택 : 4, 6, 7, 8, 9, 10
    2.  두 번째 스택 : 3, 5
    3.  세 번째 스택 : 2
    4.  네 번째 스택 : 1
    • 예를 들어 첫 번째 스택에 4를 넣고, 두 번째 스택에 3를 넣었는데, 그 다음 값이 3보다 큰 6이기 때문에 첫 스택 위치로 돌아가서 조건을 다시 처리한다.
    • 이렇게 모든 값을 꺼냈을 때 오름차순으로 꺼내지는 것을 확인 할 수 있다.
    반응형

    댓글