본문 바로가기

코딩테스트/백준

[백준-자바] 1874번 스택 수열 / 2022.05.26

 

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

 

1874번: 스택 수열

1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다.

www.acmicpc.net

 

 

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int A [] = new int [n];
        for(int i=0; i<n; i++){ // 수열 입력받기
            A[i] = sc.nextInt();
        }
        int num = 1; // num변수는 1부터
        Stack<Integer> stack = new Stack<>(); // 스택 생성
        StringBuffer bf = new StringBuffer(); // 연산 입력할 StringBuffer
        for(int i = 0; i<n; i++){ // 수열만큼 반복
            if(num<=A[i]){ // num이 찾는 수열보다 작거나 같을 경우
                while(num<=A[i]) { // stack에 num을 push
                    stack.push(num++); // num + 1
                    bf.append("+\n"); // + 연산자 추가
                }
                stack.pop(); // num이 찾는 수열과 같은 수 일 경우
                bf.append("-\n"); // pop 하고 - 연산자 추가
            } else{ // num이 찾는 수열보다 클 경우
                int top = stack.pop(); // 맨 위의 숫자를 pop
                if(top > A[i]){ // 맨 위의 수가 찾는 수열 보다 클 경우
                    System.out.println("NO"); // 입력된 수열을 만들 수 없음
                    return;
                }
                else{ // 작을 경우
                    bf.append("-\n"); // - 연산자 추가
                }
            }
        }
        System.out.println(bf.toString()); // 연산 출력
    }
}