스택을 이용한 문제다.문제 설명이 상당히 난해하다.요약하면,스택에는 무조건 수를 1부터 차례대로 넣으며,스택을 넣고 빼고만 해서 주어진 수열을 만들수 있냐?가 문제다.적어놓고도 뭔 소린지 모르겠다.
import java.util.*;
import java.io.*;
import java.time.*;
public class Main {
public static void main(String args[]) throws IOException {
Scanner sc = new Scanner(System.in);
Boolean bl=true;
Stack<Integer> st = new Stack<>();
int N = sc.nextInt();
int num=1;
// num은 여기서 초기화된 이후 계속 커지기만 한다.이게 맞는건가?싶었는데 문제에서 그러라고 나와있더라.어이없다.
StringBuffer bf = new StringBuffer();
for(int i=0;i<N;i++){
int su = sc.nextInt();
if(num<=su){
while(num<=su){
st.push(num++);
bf.append("+\n");
}
st.pop();
bf.append("-\n");
}else{
int n = st.pop();
if(n>su){
System.out.println("NO");
bl=false;
break;
}else{
bf.append("-\n");
}
}
}
if(bl) System.out.println(bf.toString());
}
}
num은 pop을 한다고 작아지는게 아니라는걸 잊지 말자.num이 입력 숫자보다 클시, 스택의 맨 위의 요소가 숫자와 일치하는게 아닌 이상 무조건 no!다.