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

8 -> 1 부터 8 까지 수를 정렬한다
4 3 6 8 7 5 2 1
1 2 3 4
4 pop, 3 pop
1 2 5 6
6 pop
1 2 3 6 7 8
8 pop, 7 pop, 5,2,1 pop
스택의 첫줄에서 길이를 읽어온다, 길이 : N
그 길이만큼 for문으로 1부터 stack에 넣어준다 : while( int i < k(입력된 숫자) )
if 그 숫자랑 같으면 pop
위를 반복
package B1874;
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
Stack<Integer> stack = new Stack<>();
StringBuilder sb = new StringBuilder(); // 답을 저장(+,-)
int start = 0; //start를 1이 아닌 0으로 설정한 이유 -> 아래 for문에서 i가 start + 1부터 시작을 해야하기 때문에 처음을 0으로 잡음
// 입력받은 수열을 처리할 동안 반복 (N회 반복)
while (N-->0) { //N--와 N>0을 합친 것
int value = Integer.parseInt(sc.next()); // 입력 값을 하나씩 읽어옴
// 입력 받은 값이 현재 스택에 넣을 값보다 큰 경우
if (value > start) {
// 현재 스택의 다음 값부터 입력 받은 값까지 스택에 추가
for (int i = start + 1; i <= value; i++) {
stack.push(i);
sb.append("+\n"); // + 저장
}
// start를 입력 받은 값으로 업데이트
start = value;
}
// 입력 받은 값이 스택의 맨 위 값과 다르면 수열을 만들 수 없음
else if (stack.peek() != value) {
// 수열을 만들 수 없음을 출력하고 종료
System.out.println("NO");
return;
}
// 입력 받은 값이 스택의 맨 위 값과 같은 경우 스택에서 값을 제거
stack.pop();
sb.append("-\n");
}
System.out.println(sb);
}
}