Languages/Java

[BOJ 길라잡이/Java] 9일차 #1874 스택 수열

효딩 2025. 3. 21. 16:12

예제

 

첫 째 줄에 n이 주어지면

둘째 줄부터 주어진 1 이상 n 이하의 숫자가 주어진다.
스택을 이용해 입력된 수열을 만들려면 어떤 연산을 해야 하는지

push는 +로, pop은 -로 표현하도록 한다.

 

import java.io.*;
import java.util.*;
 
public class Main {
 
	public static void main(String[] args) throws IOException {
 
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        int[] arr = new int[n];
        Stack<Integer> st = new Stack<>();
        StringBuilder sb = new StringBuilder();
        
        for (int i = 0; i < n; i++) {
            arr[i] = Integer.parseInt(br.readLine());
        }

        int cur = 1; // 스택에 넣을 숫자

        for (int i = 0; i < n; i++) {
            int num = arr[i];

            while (cur <= num) {
                st.push(cur);
                cur++;
                sb.append("+\n");
            }
            
            if (st.peek() == num) {
                st.pop();
                sb.append("-\n");
            } else {
                System.out.println("NO");
                return;
            }
        }

        System.out.println(sb.toString());

        
    }
}

arr에 n개의 숫자들을 차례대로 넣는다.

cur부터 num까지 숫자를 stack에 push하고,

stack의 peek이 num과 같으면 pop하고 같지 않으면 "NO"를 출력한다.