응애개발자
article thumbnail
728x90

문제

 

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


 

접근 방법

1. 스택을 활용하여 들어오는 값이 시작값(s)보다 크면 값을 push 해주고, 팝을하여 해당번호를 출력합니다.

2. 만약 스택에 넣은 값의 제일 최상단이 들어오는 값이랑 들어오는 값이 다르다면 NO를 출력후 리턴합니다.

 

코드

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

public class Main {
    private static StringBuilder sb;
    private static BufferedReader br;
    private static StringTokenizer st;
    private static int N;
    private static Stack<Integer> stack = new Stack<Integer>();


    //입력
    public static void input() throws Exception {
        br = new BufferedReader(new InputStreamReader(System.in));
        sb = new StringBuilder();

        N = Integer.parseInt(br.readLine());
    }

    //실행
    public static void process() throws Exception{
        int s = 0;

        while(N>0){
            int input = Integer.parseInt(br.readLine());

            if(input>s){
                for(int i = s+1; i<=input ; i++){
                    stack.push(i);
                    sb.append('+').append("\n");
                }
                s = input;
            }else if(stack.peek()!=input){
                System.out.println("NO");
                return;
            }

            stack.pop();
            sb.append('-').append("\n");

            N--;
        }
        System.out.println(sb.toString());
    }


    public static void main(String[] args) throws Exception {
        input();
        process();
    }
}
profile

응애개발자

@Eungae-D

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!