[백준] 2493 탑 (골드5)

AI·2025년 9월 8일

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

탑을 선택했으면 없애는 것이 포인트

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayDeque;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws Exception{

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int N = Integer.parseInt(br.readLine());
        int[] answer = new int[N];

        ArrayDeque<int[]> top = new ArrayDeque<>();
        StringTokenizer st = new StringTokenizer(br.readLine());
        for(int i=0;i<N;i++){
            int height = Integer.parseInt(st.nextToken());

            // stack 상단에 있는 탑의 높이가 현재 탑보다 작으면 제거
            while(!top.isEmpty() && top.peek()[0]<height){
                top.pop();
            }

            if(top.isEmpty()){
                answer[i] = 0;
            } else{
                answer[i] = top.peek()[1]+1; //index+1
            }
            top.push(new int[]{height, i}); // {값, 순서} 넣기
        }

        for(int a : answer)
            bw.write(a+" ");
        bw.flush();
        bw.close();
        br.close();

    }
}

0개의 댓글