알고리즘

[백준] 1874번 스택 수열 _ JAVA ( 주석 설명 ) 본문

백준 - JAVA/스택

[백준] 1874번 스택 수열 _ JAVA ( 주석 설명 )

wch_s 2023. 3. 17. 04:18

풀이

1) 1부터 차례대로 stack에 넣을 index 변수를 생성한다.

2) 입력받은 num이 index<=num 일 때까지 stack에 push("+")를 한다.

3) stack.peek() == num 이면, stack.pop()을 하고
   != 이면, 만들어질 수 없는 수열 연산이므로 "NO" 를 출력한다.

 

코드

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

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()); //N까지의 수인, N 입력
        Stack<Integer> stack = new Stack<>(); //1~N까지의 수를 stack 에 넣으며 필요한 연산 구하기

        int index = 1; //stack에 넣을 변수, 1부터 stack에 넣는다.
        StringBuilder sb = new StringBuilder(); //필요한 연산을 저장하기 위한 변수

        for(int i=0;i<N;++i){
            int num = Integer.parseInt(br.readLine()); //입력된 수열 숫자

            while (index<=num) {
                stack.push(index);
                sb.append("+").append('\n');

                index++;
            }

            if (stack.peek() == num) { //stack.peek()=='입력된 수열 숫자' 일 때 pop을 한다.
                stack.pop();
                sb.append("-").append('\n');
            }

            else { //다르면 불가능한 경우이므로, NO를 저장하고 바로 break를 한다.
                sb = new StringBuilder("NO");
                break;
            }
        }

        System.out.println(sb);
    }
}