Leetcode Java Design Circular Queue
업데이트:
문제
코드
class MyCircularQueue {
private final int[] array;
private int front;
private int rear;
private int length;
public MyCircularQueue(int k) {
this.array = new int[k];
this.front = 0;
this.rear = -1;
this.length = 0;
}
public boolean enQueue(int val) {
if (!this.isFull()) {
this.rear = (this.rear + 1) % this.array.length;
this.array[this.rear] = val;
this.length++;
return true;
} else {
return false;
}
}
public boolean deQueue() {
if (!this.isEmpty()) {
this.front = (this.front + 1) % this.array.length;
this.length--;
return true;
} else {
return false;
}
}
public int Front() {
return this.isEmpty() ? -1 : this.array[this.front];
}
public int Rear() {
return this.isEmpty() ? -1 : this.array[this.rear];
}
public boolean isEmpty() {
return this.length == 0;
}
public boolean isFull() {
return this.length == this.array.length;
}
}
/**
* 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();
*/
결과
설명
- 아래의 구조의 순환되는 Queue를 구현하는 문제이다.
- 생성자인 MyCircularQueue(k)는 Queue 크기인 k를 이용하여 객체를 초기화한다.
- 메서드인 Front()는 Queue의 앞에서 값을 가져오는 역할을 수행하며, 값이 없을 경우 -1을 반환한다.
- 메서드인 Rear()는 Queue의 뒤에서 값을 가져오는 역할을 수행하며, 값이 없을 경우 -1을 반환한다.
- 메서드인 enQueue(int value)는 Queue에 value를 추가하는 역할을 수행하며, 성공 시 true를 반환한다.
- 메서드인 deQueue()는 Queue의 값을 삭제하는 역할을 수행하며, 성공 시 true를 반환한다.
- 메서드인 isEmpty()는 Queue가 비어있는지 검증하는 역할을 수행한다.
- 메서드인 isFull()은 Queue가 꽉 차있는지 검증하는 역할을 수행한다.
- 문제 풀이에 필요한 변수를 정의한다.
- array는 Queue의 역할을 수행할 배열이다.
- front와 rear는 Queue의 앞과 뒤의 값을 저장할 변수이다.
- length는 Queue의 현재 크기를 저장할 변수이다.
- 생성자인 MyCircularQueue(k)를 정의한다.
- Queue를 담당할 array를 k 크기의 정수 배열로 초기화한다.
- front와 rear는 0과 -1로, length는 0으로 초기화한다.
- 메서드인 Front()를 정의한다.
- 8번에서 정의한 isEmpty() 메서드를 이용하여 Queue가 비어있는 경우 -1을, 비어있지 않으면 array의 front번째 값을 반환한다.
- 메서드인 Rear()를 정의한다.
- 8번에서 정의한 isEmpty() 메서드를 이용하여 Queue가 비어있는 경우 -1을, 비어있지 않으면 array의 rear번째 값을 반환한다.
- 메서드인 enQueue(int value)를 정의한다.
- 9번에서 정의한 isFull() 메서드를 이용하여 Queue가 꽉 차있지 않으면 아래를 수행한다.
- rear에 Overflow를 방지하기 위해 $rear + 1$에서 array의 길이를 나눈 나머지 값을 넣어준다.
- array의 rear번째 위치에 val을 넣어준다.
- 값을 들어갔으므로 length를 증가시킨다.
- 값을 Queue에서 성공적으로 추가했으므로 true를 반환한다.
- 위의 경우가 아니라면 false를 반환한다.
- 9번에서 정의한 isFull() 메서드를 이용하여 Queue가 꽉 차있지 않으면 아래를 수행한다.
- 메서드인 deQueue()를 정의한다.
- 9번에서 정의한 isFull() 메서드를 이용하여 Queue가 꽉 차있지 않으면 아래를 수행한다.
- front에 Overflow를 방지하기 위해 $front + 1$에서 array의 길이를 나눈 나머지 값을 넣어준다.
- 배열의 위치를 변경해서 시작 포인트를 뒤로 미뤘으므로, length를 감소시킨다.
- 값을 Queue에서 성공적으로 제거했으므로 true를 반환한다.
- 위의 경우가 아니라면 false를 반환한다.
- 메서드인 isEmpty()를 정의한다.
- length가 0인지를 검증한 결과를 반환한다.
- 메서드인 isFull()을 정의한다.
- length와 array의 길이가 같은지 결과를 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기