[알고리즘] Leetcode_622_Design_Circular_Queue

jeongjwon·2023년 4월 5일
0

알고리즘

목록 보기
21/48

Problem

Solve

class MyCircularQueue {
    int[] cirQueue ;
    LinkedList<Integer> queue;
    int size ;
    int front = 0, rear = 0;

    public MyCircularQueue(int k) {
        cirQueue = new int[k+1];
        queue = new LinkedList<>();
        size = k+1;
    }
    
    public boolean enQueue(int value) {
        // if(size == queue.size()) return false;
        // queue.add(value);
        // return true;
        if(isFull()) return false;
        rear = (rear + 1) % size;
        cirQueue[rear] = value;
        return true;
    }
    public boolean deQueue() {
        //앞에서 빼기
        
        // if(queue.size() <= 0) return false;
        // queue.remove(0);
        // return true;
        
        if(isEmpty()) return false;
        front = (front + 1) % size;
        return true;
        
    }
    
    public int Front() {
        // return queue.get(0);
        return isEmpty() ? -1 : cirQueue[(front+1)%size];
    }
    
    public int Rear() {
        // return queue.get(queue.size()-1);
        return isEmpty() ? -1 : cirQueue[rear];
    }
    
    public boolean isEmpty() {
        // return queue.size() == 0;
        return front == rear ? true : false;
    }
    
    public boolean isFull() {
        return (rear + 1) % size == front ? true : false;
    }
}

/**
 * Your MyCircularQueue object will be instantiated and called as such:
 * MyCircularQueue obj = new MyCircularQueue(k);
 * boolean param_1 = obj.enQueue(value);
 * boolean param_2 = obj.deQueue();
 * int param_3 = obj.Front();
 * int param_4 = obj.Rear();
 * boolean param_5 = obj.isEmpty();
 * boolean param_6 = obj.isFull();
 */

처음은 쉽게 LinkedList 로 구현하고자 했는데, 크기가 정해지지 않은 부분이다보니 Error 가 발생했다.
아주 원초적인 배열로 접근했고, 추가 인덱스를 rear, 삭제 인덱스를 front 로 지정했다.
추가할 때마다 rear+1 하되 원형이기 때문에 size만큼 % 해준다.
삭제할 때마다는 front+1 하고 굳이 값을 삭제할 필요는 없다.
isFull 은 추가하고자하는 인덱스 (rear+1)%size = front,
isEmpty 는 rear==front


0개의 댓글