매일 Algorithm

신재원·2023년 6월 16일
0

Algorithm

목록 보기
145/243

백준 17298번

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

public class problem473 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        int size = in.nextInt();
        int[] arr = new int[size];
        Stack<Integer> stack = new Stack<>();

        for (int i = 0; i < size; i++) {
            arr[i] = in.nextInt();
        }

        for (int i = 0; i < arr.length; i++) {

            // stack이 비어있지 않으면서, arr의 stack 인덱스와 arr배열 비교
            while (!stack.isEmpty() && arr[stack.peek()] < arr[i]) {
                // stack에서 pop을 하면서 값을 할당해줘야한다.
                arr[stack.pop()] = arr[i];
            }
            stack.push(i);
        }

        // 스택에 남아있는 인덱스 -1 초기화
        while (!stack.isEmpty()) {
            arr[stack.pop()] = -1;
        }

        StringBuilder output = new StringBuilder();

        for (int i = 0; i < arr.length; i++) {
            output.append(arr[i]).append(" ");
        }

        System.out.println(output.toString());

    }
}

0개의 댓글