[백준/자바] 1874번: 스택 수열

Wuchang·2023년 1월 19일
0

백준

목록 보기
19/27

문제설명

입출력 예

풀이 및 후기

스택의 작동원리를 이용해 +, - 을 출력하는 문제다. stack에 push() 할때는 "+" 을 출력해주고 pop() 할때는 "-" 을 출력해주면 된다. stack에 다음으로 들어갈 요소를 표현하는 변수를 사용해 코드를 구현했다.
예시에서 첫번째로 입력된 4가 표현되려면, 1부터 4까지 총 4회 push 해준 후 pop() 으로 빼주면 4가 return 된다. 후입선출 LIFO 원리의 stack 구조이기 때문에 다음으로 pop 될 요소는 3이므로 한번의 pop으로 3을 return 해준다. 다음 입력받은 값은 6이므로 다음으로 push 해줄 5, 6을 두번 push 해준 후 pop으로 6을 return 해준다. 같은 과정이 반복되는데, 다음의 입력값이 표현 불가능한 경우 NO를 출력해주면 된다.

    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(bf.readLine());
        Stack<Integer> stack = new Stack<>();
        StringBuilder sb = new StringBuilder();
        int last_value = 0;

        for (int i = 0; i < n; i++) {
            int value = Integer.parseInt(bf.readLine());

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

BufferedReader 클래스를 사용해서 입력값을 받았고, "+" 와 "-" 는 StringBuilder에 append() 하여 붙여주었다.

profile
우창의 개발일지🐈

0개의 댓글