메모
/*
1 ~ n 까지의 수를 스택에 넣었다가 뽑아 늘어놓음으로써, 하나의 수열을 만들 수 있다.
스택에 push하는 순서 : 반드시 오름차순
push연산은 +로, pop 연산은 -로 표현
불가능한 경우 NO를 출력
임의의 수열이 주어졌을 때
스택을 이용해 그 수열을 만들 수 있는지 없는지?
있다면 어떤 순서로 push와 pop 연산을 수행해야 하는지?
*/
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Stack;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder(); // 출력할 결과물 저장
Stack<Integer> stack = new Stack<>(); // 스택 사용
int N = Integer.parseInt(br.readLine()); // 형 변환
int start = 0;
// N 번 반복
while (N -- > 0) {
int value = Integer.parseInt(br.readLine()); // value : 입력받은 값
// push 할 경우
if (value > start) {
for (int i = start + 1; i <= value; i++) { // start + 1부터 입력받은 value 까지 push 한다
stack.push(i);
sb.append('+').append('\n'); // + 를 저장
}
start = value; // 다음 push 할 때의 오름차순을 유지하기 위한 변수 초기화 (이전까지 push 받은 가장 최근 값으로)
// NO 할 경우
} else if (stack.peek() != value) { // top에 있는 원소가 입력받은 값과 같지 않은 경우
System.out.println("NO");
return;
}
// pop 할 경우
stack.pop(); // start ~ value 까지 push 돼있다면, pop을 한다
sb.append('-').append('\n');
}
System.out.println(sb);
}
}
변수
stack.peek() != value
BufferedReader
StringBuilder
참고: [백준] 1874번 : 스택 수열 - JAVA [자바]