BaekJoon 1874, 스택 수열


이문제는 스택을 이용해서 문제를 푸는 것입니다.

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

위에서 문제 확인 가능합니다. ^^

현재 a[t] 값보다 작으면 계속해서 push를 해줍니다.

같으면 pop을 해주고

크면 수열을 만드는 것이 불가능 합니다.

처음에는 순서가 중간 것, 큰 것, 작은 것 이렇게 있으면 sorting을 할 수 없다는 것을 알고 있었기 때문에  이 방식으로 하다가 안되서 다른 방법으로 풀었습니다.



 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import java.io.*;
import java.util.ArrayList;
import java.util.Stack;

public class B1874 {
    static int N;
    static int[] a = new int[100001];
    static ArrayList<Character> list = new ArrayList<>();
    static Stack<Integer> s = new Stack<>();
    static boolean makeSeries = true;
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        N = Integer.parseInt(br.readLine());
        for (int i = 0; i < N; i++) {
            a[i] = Integer.parseInt(br.readLine());
        }

        int t = 0, idx = 1;
        while (t < N) {
            if (s.isEmpty() || s.peek() < a[t]) {
                while (idx <= a[t]) {
                    s.push(idx);list.add('+');idx++;
                }
            }else if (s.peek() == a[t]) {
                s.pop();list.add('-');t++;
            }else {
                makeSeries = false;break;
            }
        }

        if (makeSeries) {
            for (int i = 0; i < list.size(); i++) {
                bw.write(list.get(i) + "\n");
                bw.flush();
            }
        }else {
            bw.write("NO\n");
            bw.flush();
        }
        bw.close();
    }
}

이 블로그의 인기 게시물

웹툰 무료로 볼 수 있는 사이트

BackJoon 1011, Fly me to the alpha centauri, 규칙 찾기 문제

BaekJoon 6591, 이항 쇼다운 조합문제