옥상 정원 꾸미기

문제 풀러가기

6198

코드

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());

    Stack<Long> stack = new Stack<Long>();
    Long cnt = 0L;

    for(int i = 1; i <= n; i++) {
      Long h = Long.parseLong(br.readLine());

      while(!stack.isEmpty()) {
        if(stack.peek() <= h) {
          stack.pop();
        } else {
          break;
        }
      }

      cnt += stack.size();
      stack.push(h);
    }

    bw.write(cnt + "\n");

    bw.flush();
  }
}

설명

문제와 반대 방향으로 생각하면 풀기 쉽다.