본문 바로가기
Algorithm & SQL/BAEKJOON

백준 JAVA 1874 스택 수열

by YoonJong 2022. 8. 12.
728x90

https://www.acmicpc.net/problem/1874

 

1874번: 스택 수열

1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다.

www.acmicpc.net

어제 못풀고 다시 도전하고 블로그 참고해서 풀었다.

그리고 오늘 다시 백지에서 풀었는데 성공!

 

stack 문제이지만, 구현문제를 많이 풀어봐야겠다고 느끼는 문제였다.

 

package BAEKJOON.Silver.Ⅲ;

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

public class NO1874_2 {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();

        int [] arr = new int[n];
        //스택을 사용해야 하는 문제
        Stack<Integer> stack = new Stack<>();
        // + 와 - 를 담을 List 생성
        ArrayList<String> list = new ArrayList<>();
        // 입력을 받은 배열의 index 를 사용하기 위함
        int order = 0;

        for (int i = 0; i < n; i++) {
            arr[i] = sc.nextInt();
        }

        // 1부터 n 까지 차례대로 담아준다.
        for (int i = 1; i <= n; i++) {
            stack.push(i);
            // push 하면 + 추가
            list.add("+");

            // stack 이 비어있지 않을동안
            while(!stack.isEmpty()) {
                // stack을 확인했는데 arr[order] 와 같으면 꺼내고 - 추가
                if(stack.peek() == arr[order]) {
                    stack.pop();
                    list.add("-");
                    // 다음 arr[order] 을 확인하기 위해 ++ 해준다.
                    order++;
                } else {
                    // 없으면 빠져나가고 다시 stack push
                    break;
                }
            }
        }
        // stack 이 전부 없으면 출력 가능
        if (stack.isEmpty()) {
            for (String s : list) {
                System.out.println(s);
            }
            // 없으면 NO
        } else {
            System.out.println("NO");
        }
    }
}
728x90

'Algorithm & SQL > BAEKJOON' 카테고리의 다른 글

백준 JAVA 11047 동전0  (0) 2022.08.13
백준 JAVA 1977 프린터 큐  (0) 2022.08.12
백준 JAVA 4949 균형잡힌 세상  (0) 2022.08.11
백준 JAVA 11651 좌표 정렬하기2  (0) 2022.08.11
백준 JAVA 11650 좌표 정렬하기  (0) 2022.08.11

댓글