[백준][1874번] 스택수열

Updated:

내가푼 코드

import java.util.Scanner;
import java.util.Stack;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Stack<Integer> st = new Stack<>();
        int max=0;
        StringBuilder str = new StringBuilder();
        int size = sc.nextInt();

        for(int i=1; i<=size; i++){
            int num = sc.nextInt();
            if(max<num){
                while(max<num){
                    str.append("+\n");
                    st.push(++max);
                }
                st.pop();
                str.append("-\n");
            }else{
                if(num != st.peek()){
                    System.out.println("NO");
                    return;
                }
                str.append("-\n");
                st.pop();
            }
        }
        System.out.println(str);
    }
}


해결법

이 문제는 stack을 사용하여 해결하는 문제다.
max는 현재까지 stack에 추가된수중 가장 큰수이다.

수열을 차례대로 스캔하며
1) max보다 큰 수가 나온다면
해당 수만큼 stack에 push한다.

2) 그외
stack에서 수를 가져와 수열의 수랑 비교한다.
만약다르다면 만들수 없는 수열이기 때문에
“no”를 출력

Leave a comment