ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java 1874 스택 수열
    PS 2023. 5. 1. 21:23

    풀이 : 

    int형 배열로 스택을 구현한 뒤 push로 스택에 값을 쌓아준 뒤 pop을 할 때 수열의 값과 top의 값이 일치하는지 확인하는데 여기서 일치하는 값을 찾지 못한다면 boolean값을 false로 한 뒤 마지막에 bool값이 false이면 NO를 아니면 연산기호를 출력한다

     

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    
    public class Main {
        static class NumberStack {
            int[] stack;
            int size;
    
            public NumberStack(int n){
                this.stack = new int[n];
                this.size = -1;
            }
            public void push(int data){
                size++;
                stack[size] = data;
            }
            public int pop(){
    
                if(size == -1){
                    return -1;
                }
                int data = stack[size];
                size --;
                return data;
    
            }
            public int empty(){
                if(size == -1){
                    return -1;
                } else {
                    return 0;
                }
            }
            public int size(){
                return size + 1;
            }
            public int top(){
                if(size == -1){
                    return -1;
                }
                return stack[size];
            }
        }
    
        public static void main(String[] args) throws IOException{
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            int n = Integer.parseInt(br.readLine());
            NumberStack stack = new NumberStack(n);
            StringBuilder sb = new StringBuilder();
    
    
            int cnt = 1;
            for(int i = 0; i < n; i++){
                int num = Integer.parseInt(br.readLine());
                if(num >= cnt){
                    while(num >= cnt){
                        stack.push(cnt);
                        cnt++;
                        sb.append('+').append("\n");
                    }
                    stack.pop();
                    sb.append('-').append("\n");
                } else {
                    boolean found = false;
                    if(stack.empty() != -1){
                        int top = stack.pop();
                        sb.append('-').append("\n");
                        if(num == top){
                            found = true;
                        }
                    }
                    if(!found){
                        System.out.println("NO");
                        return;
                    }
                }
            }
            System.out.println(sb.toString());
        }
    }

    'PS' 카테고리의 다른 글

    Java 10845 큐  (0) 2023.05.02
    Java 1406 에디터  (0) 2023.05.02
    Java 9093 단어 뒤집기  (0) 2023.05.01
    Java 10828 스택  (0) 2023.04.29
    Java 10810번 문제. 공넣기  (0) 2023.04.20
Designed by Tistory.