[10866] 덱

HeeSeong·2021년 7월 16일
0

백준

목록 보기
35/79
post-thumbnail

🔗 문제 링크

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


❔ 문제 설명


정수를 저장하는 덱(Deque)를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.

명령은 총 여덟 가지이다.

  • push_front X: 정수 X를 덱의 앞에 넣는다.

  • push_back X: 정수 X를 덱의 뒤에 넣는다.

  • pop_front: 덱의 가장 앞에 있는 수를 빼고, 그 수를 출력한다. 만약, 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.

  • pop_back: 덱의 가장 뒤에 있는 수를 빼고, 그 수를 출력한다. 만약, 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.

  • size: 덱에 들어있는 정수의 개수를 출력한다.

  • empty: 덱이 비어있으면 1을, 아니면 0을 출력한다.

  • front: 덱의 가장 앞에 있는 정수를 출력한다. 만약 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.

  • back: 덱의 가장 뒤에 있는 정수를 출력한다. 만약 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.

출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.


⚠️ 제한사항


  • 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다.

  • 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다.

  • 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다.

  • 문제에 나와있지 않은 명령이 주어지는 경우는 없다.



💡 풀이 (언어 : Java)


앞, 뒤로 삽입, 제거가 모두 가능해야 하므로 LinkedList를 사용했다. LinkedList를 사용하면 맨 앞과 뒤의 원소의 추가, 삭제는 시간복잡도 O(1)이 소요되어 효율적이다.

public class Main {
    static class Deque {
        private LinkedList<Integer> linkList;

        private Deque() {
            this.linkList = new LinkedList<>();
        }

        private void push_front(int x) {
            linkList.addFirst(x);
        }
        private void push_back(int x) {
            linkList.addLast(x);
        }
        private int pop_front() {
            if (linkList.isEmpty())
                return -1;
            return linkList.pollFirst();
        }
        private int pop_back() {
            if (linkList.isEmpty())
                return -1;
            return linkList.pollLast();
        }
        private int size() {
            return linkList.size();
        }
        private int empty() {
            return (linkList.isEmpty()) ? 1 : 0;
        }
        private int front() {
            if (linkList.isEmpty())
                return -1;
            return linkList.peekFirst();
        }
        private int back() {
            if (linkList.isEmpty())
                return -1;
            return linkList.peekLast();
        }
    }
    public static void main(String[] args) throws IOException {
        LinkedList<Integer> linkList = new LinkedList<>();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        Deque deque = new Deque();
        for (int i = 0; i < n; i++) {
            String[] input = br.readLine().split(" ");
            switch (input[0]) {
                case "push_front":
                    deque.push_front(Integer.parseInt(input[1]));
                    break;
                case "push_back":
                    deque.push_back(Integer.parseInt(input[1]));
                    break;
                case "pop_front":
                    System.out.println(deque.pop_front());
                    break;
                case "pop_back":
                    System.out.println(deque.pop_back());
                    break;
                case "size":
                    System.out.println(deque.size());
                    break;
                case "empty":
                    System.out.println(deque.empty());
                    break;
                case "front":
                    System.out.println(deque.front());
                    break;
                case "back":
                    System.out.println(deque.back());
            }
        }
    }
}
profile
끊임없이 성장하고 싶은 개발자

0개의 댓글