[백준_10866] 덱 - JAVA

jm_25·2021년 12월 11일
0

알고리즘

목록 보기
34/40

문제 출처

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


개념

Deque 란?

덱(Deque)은 어떤 쪽으로 입력하고 어떤 쪽으로 출력하냐에 따라 스택으로 사용할 수 있고 큐로 사용할 수 있다. 특히 한쪽으로만 입력 가능하도록 설정한 덱을 스크롤(Scroll)이라고 하며, 한쪽으로만 출력 가능하도록 설정한 덱을 셸프(Shelf)라고 한다.


풀이

  • Deque 문제이며 자바의 Deque 라이브러리를 이용해 쉽게 풀 수 있다.
  • Deque에 대한 개념은 찾아보는 것을 추천한다.



코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine());
        int N = Integer.parseInt(stringTokenizer.nextToken());
        Deque<Integer> deque = new ArrayDeque<>();
        for (int i = 0; i < N; i++) {
            stringTokenizer = new StringTokenizer(bufferedReader.readLine());
            String command = stringTokenizer.nextToken();
            int value = 0;
            switch (command) {
                case "push_front":
                    value = Integer.parseInt(stringTokenizer.nextToken());
                    deque.addFirst(value);
                    break;
                case "push_back":
                    value = Integer.parseInt(stringTokenizer.nextToken());
                    deque.addLast(value);
                    break;
                case "pop_front":
                    if (deque.isEmpty()) System.out.println(-1);
                    else System.out.println(deque.pollFirst());
                    break;
                case "pop_back":
                    if (deque.isEmpty()) System.out.println(-1);
                    else System.out.println(deque.pollLast());
                    break;
                case "size":
                    System.out.println(deque.size());
                    break;
                case "empty":
                    if (deque.isEmpty()) System.out.println(1);
                    else System.out.println(0);
                    break;
                case "front":
                    if (deque.isEmpty()) System.out.println(-1);
                    else System.out.println(deque.getFirst());
                    break;
                case "back":
                    if (deque.isEmpty()) System.out.println(-1);
                    else System.out.println(deque.getLast());
                    break;
            }
        }
    }
}



채점 결과

profile
매일 매일 한 개씩

0개의 댓글