백준 > 덱

jinvicky·2023년 11월 29일
0

ALG

목록 보기
9/62

덱(Deque)

덱을 util 쓰지 않고 구현하기

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

public class Main {

    private LinkedList<Integer> deck = new LinkedList<>();

    //덱 구현하기
    public void pushBack(int item) {
        deck.addLast(item);
    }

    public void pushFront(int item) {
        deck.addFirst(item);
    }

    public int front() {
        return deck.size() < 1 ? -1 : deck.getFirst();
    }

    public int back() {
        return deck.size() < 1 ? -1 : deck.getLast();
    }

    public int size() {
        return deck.size();
    }

    public int empty() {
        return deck.size() < 1 ? 1 : 0;
    }

    public int popFront() {
        return deck.size() < 1 ? -1 : deck.removeFirst();
    }

    public int popBack() {
        return deck.size() < 1 ? -1 : deck.removeLast();
    }


    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

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

        Main deck = new Main();

        while (N-- > 0) {
            String[] arr = br.readLine().split(" ");
            switch (arr[0]) {
                case "push_back":
                    deck.pushBack(Integer.parseInt(arr[1]));
                    break;
                case "push_front":
                    deck.pushFront(Integer.parseInt(arr[1]));
                    break;
                case "pop_front":
                    bw.append(deck.popFront() + "\n");
                    break;
                case "pop_back":
                    bw.append(deck.popBack() + "\n");
                    break;
                case "size":
                    bw.append(deck.size() + "\n");
                    break;
                case "empty":
                    bw.append(deck.empty() + "\n");
                    break;
                case "front":
                    bw.append(deck.front() + "\n");
                    break;
                case "back":
                    bw.append(deck.back() + "\n");
                    break;
            }
        }

        bw.flush();
        bw.close();
    }
}

덱(Deque)이란?

스택과 큐만 들어보고 덱은 처음이었다.
덱은 양방향 큐와 같다. 앞뒤로 선입선출이 가능한 구조이다.

나는 덱을 LinkedList로 구현했다.
LinkedListArrayList와 비교되는 자료구조인데, 삽입/삭제 시에는 LinkedList가 유리하고, 검색 시에는 ArrayList가 유리하다고 한다.

결과

정답

소요 시간

30분 내

profile
일단 쓰고 본다

0개의 댓글