백준 10828번 - 스택

thang_velog·2022년 7월 19일
0

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

선형 자료구조를 공부하면서 풀어보기 위해 선택한 스택 문제다.

기본적인 Stack 클래스에서 활용할 수 있는 메소드들을 새롭게 리턴하여 출력될 수 있게 하면 되는 문제였다.

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

public class Main {

    static int checkEmpty(Stack<Integer> stack) {
        if (stack.isEmpty()) {
            return 1;
        }

        return 0;
    }

    static int checkTop(Stack<Integer> stack) {
        if (stack.isEmpty()) {
            return -1;
        }

        return stack.peek();
    }

    static int checkPop(Stack<Integer> stack) {
        if (stack.isEmpty()) {
            return -1;
        }

        return stack.remove(stack.size() - 1);

    }

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

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

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

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

        for (int i = 0; i < n; i++) {
            StringTokenizer cmd = new StringTokenizer(br.readLine(), " ");


            switch (cmd.nextToken()) {
                case "push":
                    stack.add(Integer.parseInt(cmd.nextToken()));
                    break;
                case "pop":
                    System.out.println(checkPop(stack));
                    break;
                case "size":
                    System.out.println(stack.size());
                    break;
                case "empty":
                    System.out.println(checkEmpty(stack));
                    break;
                case "top":
                    System.out.println(checkTop(stack));
                    break;
            }
        }

        br.close();

    }

}

이 문제의 시간제한은 0.5초이다.
처음에는 Scanner를 활용하여 풀었지만 시간 초과로 정답이 아니였고
시간을 단축시키기 위해서 BufferedReader를 활용하였다.
그리고 개행입력에 따라 구분할 수 있도록 StringTokenizer를 활용했고
default기준으로는 공백을 따라 토큰이 나뉘기 때문에 띄어쓰기를 기준으로 각 토큰을
switch-case문으로 새로 만든 메소드들을 실행하여 출력하도록 구현했다.

BufferedReader는 입력을 String타입으로 읽어오기 때문에 숫자의 경우 parsing을 해줘야했다.
main 뒤에 throws IOException도 필요하다.

0개의 댓글