알고리즘

백준 1874번 스택 수열 (JAVA)

박카스마시며코딩 2021. 12. 6. 10:51

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

 

 

입력을 받고 스택의  peek 값이 해당 입력값보다 작으면 해당 숫자까지 스택에 넣어주고, 해당 숫자를 pop합니다.

만약 스택이 비어있거나 peek값이 해당 숫자와 같지 않다면 해당 수열을 만들수 없기 때문에 flag를 false로 만들었습니다.

 

 

package BOJ;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Deque;
import java.util.LinkedList;
import java.util.function.Function;

public class BOJ_1874 {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//        StringTokenizer st = new StringTokenizer(br.readLine()," ");
        Function<String,Integer> stoi = Integer::parseInt;
        Deque<Integer> stack = new LinkedList<>();
        int n = stoi.apply(br.readLine());
        int num = 1;
        boolean flag = true;
        StringBuilder sb = new StringBuilder();
        for(int i = 0 ; i < n ; i++){
            int now = stoi.apply(br.readLine());
            while(stack.isEmpty() || stack.peek() < now){
                stack.push(num++);
                sb.append("+\n");
            }
            if (!stack.isEmpty() && stack.peek() == now){
                stack.pop();
                sb.append("-\n");
            }else{
                flag = false;
            }
//            System.out.println(flag);
        }
        if(!flag){
            System.out.println("NO");
        }else{
            System.out.println(sb.toString());
        }
    }
}

'알고리즘' 카테고리의 다른 글

백준 10164번 격자상의 경로 (JAVA)  (0) 2021.12.08
백준 16947번 서울 지하철 2호선 (JAVA)  (0) 2021.12.07
백준 2617번 침투 (JAVA)  (0) 2021.12.05
ALGOSPOT - PICINC (java)  (0) 2021.12.03
백준 11728번 배열 합치기  (0) 2021.12.03