스택 수열

문제 풀러가기

1874

코드

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());
    int num = 1;
    int[] arr = new int[n];

    Stack<Integer> stack = new Stack<Integer>();

    boolean isAble = true;
    StringBuilder sb = new StringBuilder();

    for(int i = 0; i < n; i++) {
      arr[i] = Integer.parseInt(br.readLine());

      if(isAble) {
        if(num <= arr[i]) {
          stack.push(num++);
          sb.append("+ \n");
        }

        if(stack.isEmpty()) {
          isAble = false;
        } else {
          while(stack.peek() >= arr[i]) {
            stack.pop();
            sb.append("- \n");

            if(stack.isEmpty()) break;              
          }
        }
      }
    }

    if(isAble)
      bw.write(sb.toString() + "\n");
    else
      bw.write("NO \n");

    br.close();
    bw.flush();
    bw.close();
  }
}

설명

처음에 문제를 이해하는게 어려워서 한참을 고민했다. 원하는 수열을 입력받으면서 그 수가 될 때까지 카운트를 늘리면서 스택에 넣는다. 그런 다음 넣은 수가 다음 수보다 크면 스택에서 제거하면서 숫자를 맞춘다.