민스씨의 일취일장

Java | 백준 10866 덱 본문

Data Structure & Algorithm

Java | 백준 10866 덱

읻민스 2024. 2. 9. 16:03
반응형

백준 10866 덱 문제에 대한글입니다.

백준 10866 덱

백준 10866 덱 썸네일 이미지이다.
백준 1086 덱

문제

문제 정보는 아래 링크에서 확인할 수 있다.

 

10866번: 덱

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net

풀이

입력값을 Switch문으로 분별해 적절한 수행을 해주면 된다.

특징

덱(Deque)를 선언하고 사용할 주 안다면 아주 쉬운 문제이다. 반대로 사용법을 잘 모른다면 덱을 연습하기 좋은 문제이다.

전체 코드

public class backjoon10866 {
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static StringTokenizer st;
    static int N;

    static void input() throws IOException {
        st = new StringTokenizer(br.readLine());
        N = Integer.parseInt(st.nextToken());
    }

    static void execute() throws IOException{
        Deque<Integer> dq = new ArrayDeque<>();
        for(int i=0; i<N; i++){
            st = new StringTokenizer(br.readLine());
            String str = st.nextToken();
            switch (str){
                case "push_front" :
                    int frontNum = Integer.parseInt(st.nextToken());
                    dq.addFirst(frontNum);
                    break;
                case "push_back" :
                    int backNum = Integer.parseInt(st.nextToken());
                    dq.addLast(backNum);
                    break;
                case "pop_front" :
                    if(dq.size()>0){
                        System.out.println(dq.getFirst());
                        dq.removeFirst();
                    } else {
                        System.out.println(-1);
                    }
                    break;
                case "pop_back" :
                    if(dq.size()>0){
                        System.out.println(dq.getLast());
                        dq.removeLast();
                    } else {
                        System.out.println(-1);
                    }
                    break;
                case "size" :
                    System.out.println(dq.size());
                    break;
                case "empty" :
                    if(dq.isEmpty()){
                        System.out.println(1);
                    } else {
                        System.out.println(0);
                    }
                    break;
                case "front" :
                    if(dq.size()>0){
                        System.out.println(dq.peekFirst());
                    } else {
                        System.out.println(-1);
                    }
                    break;
                case "back" :
                    if(dq.size()>0){
                        System.out.println(dq.peekLast());
                    } else {
                        System.out.println(-1);
                    }
                    break;
            }
        }
    }

    public static void main(String[] args) throws IOException{
        input();
        execute();
    }
}

소감

8개월 전에 알고리즘 문제풀이를 시작한 지 얼마 안 됐을 때도 풀었던 문제이다. 그 당시 고민을 아주 많이 하고 풀었던 기억이 난다. 그 전의 코드를 살펴보니, 많이 복잡하게 구현했다고 느끼는 부분들이 있었다. 반대로 지금 그때에 비해서 많이 발전했구나란 생각이 들어 기분이 좋다.

Deque를 자주 사용하면 괜찮은데, 매번 어떻게 선언했느지 기억이 나지 않는다. 이번 기회에 뇌에 새길 수 있도록 해야겠다.

Deque<Type> name = new ArrayDeque<>();

 

728x90
반응형