1874 스택 수열 : https://www.acmicpc.net/problem/1874
Stack에 들어있는 수를 pop하여 주어진 수열을 만들수 있는지 확인하는 문제.
문제 풀이는 아래와 같다.
stack.peek()값이 주어진 수열의 값에 만족한다면 만족하지 않을 때까지 pop()
을 반복한다.public class 스택수열 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
int[] sequence = new int[N];
for (int i = 0; i < N; i++) {
sequence[i] = Integer.parseInt(br.readLine());
}
StringBuilder sb = new StringBuilder();
Stack<Integer> stack = new Stack<>();
int i=0;
for (int n = 1; n <= N; n++) {
stack.push(n);
sb.append("+");
sb.append("\n");
//stack.peek()와 주어진 수열값이 같을 동안 pop()
while(!stack.isEmpty() && stack.peek() == sequence[i]){
stack.pop();
sb.append("-");
sb.append("\n");
i++;
}
}
//stack에 값이 존재한다면 주어진 수열을 만들 수 없다는 뜻.
if(!stack.isEmpty()){
sb = new StringBuilder();
sb.append("NO");
}
bw.write(sb.toString());
bw.flush();
bw.close();
}
}