1๏ธโฃ Circular Queue(์ํ ํ)์ ์ค๊ฐ ์ง์ ์ฐพ๊ธฐ.
Java์์ ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ ๊ตฌํํ ์ํ ํ์์ ์ค๊ฐ ์ง์ ์ ์ฐพ๋ ๋ฐฉ๋ฒ์ ํ์ ์์ ์์น(โfrontโ)์ ๋ ์์น(โrearโ)๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ณ์ฐํ ์ ์์ต๋๋ค.
์ค๊ฐ ์ง์ ์ ์ฐพ๋ ๊ณต์์ ์ํ ํ์ ํน์ฑ์ ๊ณ ๋ คํ์ฌ ์ ์ ํ ์กฐ์ ๋์ด์ผ ํฉ๋๋ค.
2๏ธโฃ ์ค๊ฐ ์ง์ ์ ์ฐพ๊ธฐ ์ํ ๋ฐฉ๋ฒ.
1๏ธโฃ ์ค๊ฐ ์ง์ ๊ณ์ฐ ๊ณต์.
์ค๊ฐ ์ง์ ์ ์ฐพ๋ ๋ฐฉ๋ฒ์ ํ์ ์์์ ๊ณผ ๋์ ์ ์ด์ฉํ์ฌ ๊ณ์ฐํ ์ ์์ต๋๋ค.
์ํ ํ์ ํฌ๊ธฐ, ์์ ์ธ๋ฑ์ค(front), ๋ ์ธ๋ฑ์ค(rear)๋ฅผ ์ฌ์ฉํ์ฌ ์ค๊ฐ ์ธ๋ฑ์ค๋ฅผ ๊ณ์ฐํ ์ ์์ต๋๋ค.
์ด๋ ์ค๊ฐ ์ง์ ์ ๊ณ์ฐํ๋ ๊ณต์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
(front + size / 2) % capacity
์ฌ๊ธฐ์ โsizeโ ๋ ํ์ ํ์ฌ ์ ์ฅ๋ ์์์ ์์ด๊ณ , โcapacityโ ๋ ํ์ ์ ์ฒด ํฌ๊ธฐ์ ๋๋ค.
3๏ธโฃ ์์
public class CircularQueue {
private int[] queue;
private int front, rear, size, capacity;
public CircularQueue(int capacity) {
this.capacity = capacity;
this.queue = new int[capacity];
this.front = 0;
this.rear = 0;
this.size = 0;
}
public boolean isFull() {
return size == capacity;
}
public boolean isEmpty() {
return size == 0;
}
public void enqueue(int data) {
if (isFull()) {
throw new RuntimeException("Queue is full");
}
queue[rear] = data;
rear = (rear + 1) % capacity;
size++;
}
public int dequeue() {
if (isEmpty()) {
throw new RuntimeException("Queue is empty");
}
int data = queue[front];
front = (front + 1) % capacity;
size--;
return data;
}
public int getMiddle() {
if (isEmpty()) {
throw new RuntimeException("Queue is empty");
}
int middleIndex = (front + size / 2) % capacity;
return queue[middleIndex];
}
public static void main(String[] args) {
CircularQueue cq = new CircularQueue(5);
cq.enqueue(10);
cq.enqueue(20);
cq.enqueue(30);
cq.enqueue(40);
cq.enqueue(50);
System.out.println("Middle element: " + cq.getMiddle()); // Output: Middle element: 30
cq.dequeue();
cq.enqueue(60);
System.out.println("Middle element: " + cq.getMiddle()); // Output: Middle element: 40
}
}
์ด ์ฝ๋์์๋ โCircularQueueโ ํด๋์ค๋ฅผ ์ ์ํ๊ณ , โenqueueโ, โdequeueโ, โisFullโ, โisEmptyโ ๋ฉ์๋๋ฅผ ํฌํจํฉ๋๋ค.
๋ํ, ํ์ ์ค๊ฐ ์์๋ฅผ ๋ฐํํ๋ โgetMiddleโ ๋ฉ์๋๋ฅผ ์ ์ํฉ๋๋ค.
์ด ๋ฉ์๋๋ ํ์ฌ ํ์ ํฌ๊ธฐ์ ์์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ค๊ฐ ์ธ๋ฑ์ค๋ฅผ ๊ณ์ฐํ ํ ํด๋น ์ธ๋ฑ์ค์ ์์๋ฅผ ๋ฐํํฉ๋๋ค.