본문 바로가기

Coding Test/백준

[백준/자바] 1874 - 스택 수열

import java.io.*;
import java.util.Stack;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        int n = Integer.parseInt(br.readLine());

        Stack<Integer> stack = new Stack<>();

        boolean flag = true;
        int now = 1;
        for(int i=0; i<n; i++) {
            int target = Integer.parseInt(br.readLine());

            if(now <= target) {
                while(now <= target) {
                    stack.push(now++);
                    sb.append("+\n");
                }
                stack.pop();
                sb.append("-\n");
            } else {
                if(stack.peek() > target) {
                    System.out.println("NO");
                    flag = false;
                    return;
                } else {
                    stack.pop();
                    sb.append("-\n");
                }
            }
        }

        if(flag) System.out.println(sb);

        br.close();
    }
}

❌ 틀린 답안 - 출력 초과 ❌

BufferedWriter버퍼가 일정량 이상 차면 비정기적으로 flush가 된다.

import java.io.*;
import java.util.Stack;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int n = Integer.parseInt(br.readLine());

        Stack<Integer> stack = new Stack<>();

        boolean flag = true;
        int now = 1;
        for(int i=0; i<n; i++) {
            int target = Integer.parseInt(br.readLine());

            if(now <= target) {
                while(now <= target) {
                    stack.push(now++);
                    bw.write("+\n");
                }
                stack.pop();
                bw.write("-\n");
            } else {
                if(stack.peek() > target) {
                    System.out.println("NO");
                    flag = false;
                    return;
                } else {
                    stack.pop();
                    bw.write("-\n");
                }
            }
        }

        if(flag) bw.flush();

        br.close();
        bw.close();
    }
}