모두CBT

다음과 같은 코드로 동작하는 원형 큐의 front와 rear의 값이 각… | [9급 지방직 컴퓨터일반] 16년 1회차 기출문제 상세 페이지

1[9급 지방직 컴퓨터일반] 16년 1회차
다음과 같은 코드로 동작하는 원형 큐의 front와 rear의 값이 각각 7과 2일 때, 이 원형 큐(queue)가 가지고 있는 데이터(item)의 개수는? (단, MAX_QUEUE_SIZE는 12이고, front와 rear의 초깃값은 0이다)
int queue[MAX_QUEUE_SIZE];
int front, rear;
void enqueue(int item) {
if( (rear + 1) % MAX_QUEUE_SIZE == front ) {
printf("queue is full\n");
return;
}
rear = (rear + 1) % MAX_QUEUE_SIZE;
queue[rear] = item;
}
int dequeue() {
if( front == rear ) {
printf("queue is empty\n");
return -1;
}
front = (front + 1) % MAX_QUEUE_SIZE;
return queue[front];
}
1
5
2
6
3
7
4
8
해설

큐에 들어 있는 데이터는 7개이다.

이 코드는 rear를 먼저 증가시킨 뒤 저장하고 front도 먼저 증가시킨 뒤 꺼내므로, front는 빈 칸을 가리키고 데이터는 front 다음 칸부터 rear 칸까지 있다.

(rear−front+12) mod 12(\mathrm{rear}-\mathrm{front}+12)\bmod 12
=(2−7+12) mod 12=7=(2-7+12)\bmod 12=7
즉 인덱스 8, 9, 10, 11, 0, 1, 2의 7칸이다.

  • 5개는 front − rear를 그대로 계산해 원형으로 감긴 방향을 거꾸로 센 값이다.
  • 6개는 front 칸이 비어 있다는 점을 과하게 반영해 rear 칸까지 하나 더 뺀 값이다.
  • 8개는 front가 가리키는 빈 칸까지 데이터로 센 값이다.

내용에 오류가 있거나 최신 법령·기준과 다른 부분이 보이면 알려주세요. 확인 후 반영하겠습니다.