[알고리즘]/백준

백준 1874 자바 - 스택 수열

broship 2021. 6. 14. 08:50

문제


 

 

 

문제해결


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

public class B1874 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        StringBuilder sb = new StringBuilder(); //출력할 결과물 저장 용도
        Stack<Integer> stack = new Stack<>();

        int n = sc.nextInt();
        int start = 1;//시작은 1부터

        for (int i = 0; i < n; i++) { //n번 반복
            int value = sc.nextInt();

            if (value>=start){
                //입력받은 값이 스텍에 집어넣었던 값보다 클 경우
                //start~value까지의 값을 스텍에 push
                for (int j = start; j <= value; j++) {
                    stack.push(j);
                    sb.append("+\n");//push할떄마다 + 저장
                }
                start = value+1;//오름차순 순서대로 push하기 위해 값 저장
            }
            //stack의 top이 입력값과 같지 않으면 수열 만들 수 없음
            else if(stack.peek()!=value){
                System.out.println("NO");
                return;
            }
            //top을 빼서 수열 만들기
            stack.pop();
            sb.append("-\n");
        }
        System.out.println(sb);
    }
}

- 1부터 첫번째 입력받은 숫자까지 stack에 push 한다

- stack의 top 요소를 pop 한다

- 이전 입력 받은 숫자를 기억한다(start = value+1)

- 다음 입력받은 숫자가 start보다 크다면 또다시 입력받은 숫자까지 push한다

- 다음 입력받은 숫자가 start보다 작다면 pop을 한다

- 만약 pop을 할 숫자가 수열과 맞지 않는다면 수열을 만들 수 없다(NO)

- n번만큼 반복이 완성되면 성공

'[알고리즘] > 백준' 카테고리의 다른 글

백준 10845 자바 - 큐  (0) 2021.06.16
백준 1406 자바 - 에디터  (0) 2021.06.15
백준 9012 자바 - 괄호  (0) 2021.06.13
백준 10828 자바 - 스택  (0) 2021.06.12
자바 - 구현 - 백준 9093 단어 뒤집기  (0) 2021.06.12