코딩테스트/백준
[백준-자바] 1874번 스택 수열 / 2022.05.26
강원대목동녀
2022. 5. 26. 14:06
https://www.acmicpc.net/problem/1874
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int A [] = new int [n];
for(int i=0; i<n; i++){ // 수열 입력받기
A[i] = sc.nextInt();
}
int num = 1; // num변수는 1부터
Stack<Integer> stack = new Stack<>(); // 스택 생성
StringBuffer bf = new StringBuffer(); // 연산 입력할 StringBuffer
for(int i = 0; i<n; i++){ // 수열만큼 반복
if(num<=A[i]){ // num이 찾는 수열보다 작거나 같을 경우
while(num<=A[i]) { // stack에 num을 push
stack.push(num++); // num + 1
bf.append("+\n"); // + 연산자 추가
}
stack.pop(); // num이 찾는 수열과 같은 수 일 경우
bf.append("-\n"); // pop 하고 - 연산자 추가
} else{ // num이 찾는 수열보다 클 경우
int top = stack.pop(); // 맨 위의 숫자를 pop
if(top > A[i]){ // 맨 위의 수가 찾는 수열 보다 클 경우
System.out.println("NO"); // 입력된 수열을 만들 수 없음
return;
}
else{ // 작을 경우
bf.append("-\n"); // - 연산자 추가
}
}
}
System.out.println(bf.toString()); // 연산 출력
}
}