문제 풀러가기

2493

코드

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

public class Main {
  public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

    int n = Integer.parseInt(br.readLine());

    StringTokenizer st = new StringTokenizer(br.readLine());
    Stack<int[]> stack = new Stack<int[]>();

    for(int i = 1; i <= n; i++) {
      int h = Integer.parseInt(st.nextToken());

      while(!stack.isEmpty()) {
        if(stack.peek()[1] >= a) {
          bw.write(stack.peek()[0] + " ");
          break;
        }

        stack.pop();
      }

      if(stack.isEmpty()) {
        bw.write("0 ");
      }

      stack.push(new int[] {i, h});
    }

    bw.flush();
  }
}

설명

배열형 스택을 사용했다. 스택에 입력 값의 순서와 높이를 저장한 후에 비교를 한다. 뒤에서 앞쪽으로 오는 것이기 때문에, 스택에 저장된 숫자보다 입력된 숫자가 작으면 스택의 위치를 출력하는 것이다.