큐는 운영체제 및 네트워크 관련된 소프트웨어의 구현에 있어서 중요한 역할을 하는 자료구조이다 !
큐잉 이론 이라는 학문에서는 수학적으로 모델링 된 결과의 확인을 위해서 특정 현상을 시뮬레이션 하게 되는데 여기서 큐가 중요한 역할을 담당한다.
따라서 ! 우리도 시뮬레이션이라는 주제를 통해서 큐가 활용되는 형태를 확인하자.
- 점장 : 음식포장 대기를 위해 대기실 만들건데...크기 어느정도로 하지 ..?
- 직원 : 음...햄버거종류에 따라 달라져서 몰라용..
- 점장 : 그럼 내가 정보를 줄테니 계산해봐
- 직원 : 그럼.. 한번 생각해보께여..
점심시간 1시간동안에는 고객이 15초당 1명씩 주문
종류별 햄버거 만드는데 걸리는 시간
치즈(12초) 불고기(24초) 더블버거(24초)- 점장 : 가끔 꽉 차게 대기실 만들어도됑
- 직원 : 음... 시뮬레이션 결과 제시할테니 최종판단은 점장님이하세욧!!
수용인원 30 : 50%로 안정적으로 고객 수용
...
수용인원 200 : 100%로 안정적으로 고객 수용
실제 현상에 대해서는 고려해야할 사항이 매우 많다.
그러므로 조건이 필요하다
- 점심시간 1시간 고객 15초 1명씩 주문
- 한 명의 고객은 하나의 버거만 주문
- 주문하는 메뉴에는 가중치x 모두 랜덤
- 햄버거를 만드는 사람은 1명 그리고 동시에 둘 이상의 버거 만들기 x
- 주문한 메뉴를 받을 다음 고객은 대기실에서 나와서 대기
- 무작위를 위한 함수 int rand(void) 사용
이를 기반으로 코드를 짜보자 !
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "CircularQueue.h"
#define CUS_COME_TERM 15 // 고객의 주문 간격 : 초 단위
#define CHE_BUR 0 // 치즈버거 상수
#define BUL_BUR 1 // 불고기버거 상수
#define DUB_BUR 2 // 더블버거 상수
#define CHE_TERM 12 // 치즈버거 제작 시간 : 초 단위
#define BUL_TERM 15 // 불고기버거 제작 시간 : 초 단위
#define DUB_TERM 24 // 더블버거 제작 시간 : 초 단위
int main(void)
{
int makeProc=0; // 햄버거 제작 진행상황
int cheOrder=0, bulOrder=0, dubOrder=0;
int sec;
Queue que;
QueueInit(&que);
srand(time(NULL));
// 아래 for문의 1회 회전은 1초의 시간 흐름을 의미한다.
for(sec=0; sec<3600; sec++)
{
if(sec % CUS_COME_TERM == 0)
{
switch(rand() % 3) // 0, 1, 2 중 한개 나온당
{
case CHE_BUR: // 0.
Enqueue(&que, CHE_TERM);
cheOrder += 1;
break;
case BUL_BUR: // 1.
Enqueue(&que, BUL_TERM);
bulOrder += 1;
break;
case DUB_BUR: // 2.
Enqueue(&que, DUB_TERM);
dubOrder += 1;
break;
}
}
if(makeProc==0 && !QIsEmpty(&que))
makeProc = Dequeue(&que);
makeProc--; // 1초씩 감소
}
printf("Simulation Report! \n", QUE_LEN);
printf(" - Cheese burger: %d \n", cheOrder);
printf(" - Bulgogi burger: %d \n", bulOrder);
printf(" - Double burger: %d \n", dubOrder);
printf(" - Waiting room size: %d \n", QUE_LEN);
return 0;
}
<필요한 추가 파일 : CircularQueue.h, CircularQueue.c>
원형 큐를 대기실로 삼고 큐의 길이를 대기실의 크기로 잡았다.
for문의 3600은 1시간을 표현한 것이다.
sec%CUS_COME_TERM == 0 는 15초에 1회씩 TRUE가 되어 실행된다.
대기실이 꽉차면 에러!
..
.
이다..
어렵다... 강의 듣고 추가적으로 적겠다...
-- 강의 내용 --
대기실이 큐를 기반으로 이루어져있다는 사실만 알면 된다고하셨다 ㅋㅅㅋ