백준_1874_스택 수열

임정민·2023년 1월 22일
2

알고리즘 문제풀이

목록 보기
21/173
post-thumbnail

코딩테스트 연습 스터디 진행중 입니다. ✍✍✍
Notion : https://www.notion.so/1c911ca6572e4513bd8ed091aa508d67

문제

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

[나의 풀이]


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Stack;

public class Main {

    static Stack<Integer> makeStack(BufferedReader br) throws NumberFormatException, IOException {

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

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

        for (int i = N; i > 0; i--) {
            stack1.push(i);
        }

        return stack1;
    }

    static void getAns(Stack<Integer> stack1, BufferedReader br) throws NumberFormatException, IOException {

        StringBuilder sb = new StringBuilder();
        Stack<Integer> stack2 = new Stack<>();
        stack2.push(0);
        ArrayList list1 = new ArrayList<>();

        int n = stack1.size();
        int m;

        for (int i = 0; i < n; i++) {
            m = Integer.parseInt(br.readLine());
            list1.add(m);
        }

        int o = -1;
        for (int i = 0; i < n; i++) {
            o = (int) list1.get(i);
            while (!stack2.peek().equals(o)) {
                if (stack2.peek() > o) {
                    System.out.println("NO");
                    return;
                }
                stack2.push(stack1.pop());
                sb.append("+" + "\n");
            }
            stack2.pop();
            sb.append("-" + "\n");
        }

        System.out.println(sb.toString());
        return;

    }

    public static void main(String[] args) throws NumberFormatException, IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Stack<Integer> stack1 = makeStack(br);
        getAns(stack1, br);
    }

}

다른 풀이들과 약간 다르게 풀어보았습니다. 입력값들이 저장된 Stack을 하나 만든 뒤 다른 Stack으로 하나씩 push 하며 pop하는 방식입니다.

풀이 과정중 계속 런타임에러(Numberforamt)에러가 떠서 고생하였는데
그 이유는 BufferedReader/Writer를 두 개 이상 생성한 것이 이유였습니다. 🐷🐷🐷

또 출력초과 에러가 뜨기도 하였습니다. 이 경우는 BufferedWrite에 여러 번 write 했을 때 버퍼의 크기를 초과하면 자동으로 호출된 것이 이유였습니다. 그리하여 출력 시에는 StringBuilder를 활용하는 방식으로 해결하였습니다.

감사합니다.🐻🐻🐻

profile
https://github.com/min731

0개의 댓글