이번 문제는 스택이 어떤 자료구조인지를 파악하는 문제였다.
스택은 Last in, First out으로 제일 먼저 넣은 값이 제일 마지막에 나오는 자료구조이다.
그래서 입력된 값을 기준으로 1부터 순차적으로 stack에 넣은 뒤
입력된 값이 stack에 들어가는 값보다 작으면 그 때 stack에서 pop() 메소드를 사용해 배열을 완성시켜 간다.
그리고 입력되는 값이 stack의 젤 마지막에 들어간 값보다 작으면 NO를 반환하고
그렇지 않으면 pop() 메소드를 사용해 배열을 마저 완성시키면 된다.
아래 코드를 참고하자.
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine());
Stack<Integer> stack = new Stack();
int[] arr = new int[N];
for(int i = 0; i < N; i++) {
arr[i] = Integer.parseInt(br.readLine());
}
int num = 1;
for(int i = 0; i < N; i++) {
int now = arr[i];
if(num <= now) {
while(num <= now) {
stack.push(num);
num++;
sb.append("+\n");
}
stack.pop();
sb.append("-\n");
} else {
int su = stack.pop();
if(su > now) {
sb.setLength(0);
sb.append("NO");
break;
} else {
sb.append("-\n");
}
}
}
System.out.println(sb);
}
}