## 과제 : 제네릭 큐 구현 목표 : 제네릭을 사용하여 다양한 데이터 타입을 저장할 수 있는 큐를 구현한다. 요구사항 : 다음 코드를 참고하여, 제네릭을 사용하여 다양한 데이터 타입을 저장할 수 있는 큐를 구현한다. ```java public class MyQueue { private int[] array; private int size; private int front; private int rear; public MyQueue() { array = new int[10]; size = 0; front = 0; rear = 0; } public void add(int value) { if (size >= array.length) { int[] newArray = new int[array.length * 2]; System.arraycopy(array, 0, newArray, 0, array.length); array = newArray; } array[rear] = value; rear = (rear + 1) % array.length; size++; } public int poll() { int value = array[front]; front = (front + 1) % array.length; size--; return value; } public int peek() { return array[front]; } public int size() { return size; } } ``` --- ## 과제 : 제네릭 큐 구현 모범답안 ```java public class MyDeque<T> { private T[] array; private int size; private int front; private int rear; public MyDeque() { array = (T[]) new Object[10]; size = 0; front = 0; rear = 0; } public void addFirst(T value) { if (size >= array.length) { T[] newArray = (T[]) new Object[array.length * 2]; System.arraycopy(array, 0, newArray, 0, array.length); array = newArray; } front = (front - 1 + array.length) % array.length; array[front] = value; size++; } public void addLast(T value) { if (size >= array.length) { T[] newArray = (T[]) new Object[array.length * 2]; System.arraycopy(array, 0, newArray, 0, array.length); array = newArray; } array[rear] = value; rear = (rear + 1) % array.length; size++; } public T pollFirst() { T value = array[front]; front = (front + 1) % array.length; size--; return value; } public T pollLast() { rear = (rear - 1 + array.length) % array.length; T value = array[rear]; size--; return value; } public T peekFirst() { return array[front]; } public T peekLast() { return array[(rear - 1 + array.length) % array.length]; } public int size() { return size; } } ```