본문 바로가기
코딩테스트/문제 풀이

[자바] 백준 10828번 스택

by 왕자두 2024. 7. 1.

 

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

 

[문제 이해]

문제의 제목처럼 스택을 구현하는 문제였다. 실버 4라고는 하지만 스택만 안다면 충분히 풀 수 있는 문제라 금방 풀었던 것 같다!

 

[문제 풀이]

파이썬에서도 스택이나 큐를 사용하는 문제를 풀 때 deque를 사용했던 것처럼 자바에서도 deque를 사용하여 이 문제를 해결하였다.

deque는 linked list로 가져와서 사용했고, deque 라이브러리 내에 있는 add(), getLast(), removeLast() 등을 활용했다. 스택이니까 top이나 pop의 경우, 가장 마지막에 삽입된 원소를 찾기 위해 Last에서 꺼낼 수 있도록 해주었다. isEmpty()의 경우, boolean 값을 반환하기 때문에 if문에다가 바로 넣어서 만약 비어있으면 그대로 1을 출력하도록, 비어있지 않다면 0을 출력하도록 하였다. 

입력 받을 때 push가 아니면 String 하나만 받게 되는데 이를 처리하기 위해 " " 즉, 빈칸을 포함하고 있으면 String 배열에 두 가지의 값을 저장할 수 있는 코드를 추가하였다. 

 

import java.io.*;
import java.util.Deque;
import java.util.LinkedList;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        Deque<Integer> deque = new LinkedList<>();

        for(int i = 0; i< N; i++){
            String str = br.readLine();
            String[] str_arr = new String[2];
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

            if(str.contains(" ")){
                str_arr = str.split(" ");
                str = str_arr[0];
            }

            if(str.equals("push")){
                deque.add(Integer.parseInt(str_arr[1]));
            }
            else if(str.equals("top")){
                if(deque.isEmpty()){
                    bw.write("-1");
                }
                else{
                    bw.write(String.valueOf(deque.getLast()));
                }
                bw.newLine();
            }
            else if(str.equals("size")){
                bw.write(String.valueOf(deque.size()));
                bw.newLine();
            }
            else if(str.equals("empty")){
                if(deque.isEmpty()){
                    bw.write("1");
                }
                else{
                    bw.write("0");
                }
                bw.newLine();
            }
            else{
                if(deque.isEmpty()){
                    bw.write("-1");
                }
                else{
                    bw.write(String.valueOf(deque.removeLast()));
                }
                bw.newLine();
            }
            bw.flush();
        }
    }
}