알고리즘/백준

[백준] 1874번 - 스택 수열

땀두 2022. 3. 20. 12:09

 

스택을 이용한 문제이다. 스택의 특성상 LIFO특성을 가지기 때문에 입력받은 숫자와 같으면 값을 출력하면서 -를 출력하고 그렇지 않으면 해당 입력값까지 스택에 저장을 한다. 이런 식으로 저장을 하며 인덱스를 올리기 때문에 인덱스보다 낮은 값이 나와 오름차순이 되지 않는 경우를 방지할 수 있다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;

public class p1874 {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		int a = Integer.parseInt(br.readLine());
		int start = 0;
		Stack<Integer> st = new Stack<>();
		
		for (int i = 0; i < a; i++) {
			int n = Integer.parseInt(br.readLine());

			if (start < n) {
				for (int j = start+1; j <= n; j++) {
					sb.append("+\n");
					st.push(j);
				}
				start = n;
			} else if (st.peek() != n) {
				System.out.println("NO");
				return;
			}
			sb.append("-\n");
			st.pop();
		}
		System.out.println(sb);
	}
}