Languages/Java

[BOJ 길라잡이/Java] 5일차 #10866 덱

효딩 2025. 3. 11. 12:59

알고리즘 분류

- 구현

- 자료 구조

- 덱

 

이전에 풀었던 큐와 비슷한데

이번엔 데크(덱) 이다!

 

파이썬에만 Deque가 따로 있는줄 알았던 나 반성해..

우리 자바 미안하다

너랑 점점 친해지고 있는 것 같아서 좋아

 

큐와 동일하게

Deque<Integer> dq = new LinkedList<>();

로 덱을 생성해준 후 나머지는 동일하게 풀었다.

 

덱(Deque)

Double-Ended Queue의 줄임말

큐의 양쪽으로 엘리먼트의 삽입과 삭제를 수행할 수 있는 자료구조를 의미한다.

어떤 쪽으로 입력하고 어떤 쪽으로 출력하느냐에 따라 스택(Stack)으로 사용할 수도 있고,

큐(Queue)로도 사용할 수 있다.

 

그냥 큐와는 다른 덱의 메소드들

addFirst(), offerFirst()

덱의 앞쪽에 값을 추가한다.

 

pollLast(), removeLast()

덱의 마지막 값을 제거한다.

 

peekLast()

덱의 마지막 값을 제거하지 않고 리턴한다.

 

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

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> dq = new LinkedList<>();
        int num = 0;

        for (int i = 0; i < N; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            String com = st.nextToken();

            if (com.equals("push_back")) {
                num = Integer.parseInt(st.nextToken());
                dq.offer(num);
            }
            else if (com.equals("push_front")) {
                num = Integer.parseInt(st.nextToken());
                dq.offerFirst(num);
            }
            else if (com.equals("pop_front")) {
                if (dq.size() == 0) {
                    System.out.println(-1);
                } else {
                    System.out.println(dq.poll());
                }
            }
            else if (com.equals("pop_back")) {
                if (dq.size() == 0) {
                    System.out.println(-1);
                } else {
                    System.out.println(dq.pollLast());
                }
            }
            else if (com.equals("size")) {
                System.out.println(dq.size());
            }
            else if (com.equals("empty")) {
                if (dq.size() == 0) {
                    System.out.println(1);
                } else {
                    System.out.println(0);
                }
            }
            else if (com.equals("front")) {
                if (dq.size() == 0) {
                    System.out.println(-1);
                } else {
                    System.out.println(dq.peek());
                }
            }
            else if (com.equals("back")) {
                if (dq.size() == 0) {
                    System.out.println(-1);
                } else {
                    System.out.println(dq.peekLast());
                }
            }
        }
    }
}