1. 개요
자바스크립트로 Queue를 구현하고 이를 이용하여 Server가 3명인 경우 Customer에 대한 time과 number요소들을 출력한다.
2. Code에 대한 설명
전체 서비스의 시간을 관장하는 Clock을 선언하고 이는 전체 시간을 담당한다.
Function Queue(){}에는dataStore[] 배열, 원형 큐의 처음과 끝, enqueue, dequeue 그리고 큐가 비어있음을 확인하는 함수인 is_empty를 선언한다.
Server를 3명으로 설정하기 위해 Server가 가지는 service_time을 각각 1, 2, 3으로 선언하고 이를 0으로 초기화 한다. 단, Server가 Customer를 받지 않을 경우 “잉여시간”으로 설정하기 위해 이를 service_idle_time으로 선언하고 초기화 한다.
모든 직원이 쉬고 있을 경우를 표현하기 위해 모든 Server의 service_time이 0이 될 경우 “직원이 모두 쉬고 있습니다.” 를 출력한다. 단, clock이 1일 때부터 Customer가 들어오도록 설정된 환경이므로 clock이0~1일 경우 모든 직원의 service_idle_time이 상승한다.
Server가 가지는 service_time은 Server가 Customer에게 할당하는 시간이고 이를 0으로 초기화 한다. 각 경우 모두 유의미한 값을 도출해 내기 위해 초기 값들을 조정할 필요가 있다. 따라서duration = 100, arrival_prob = 0.7, max_serv_time = 9로 설정했다.
If( is_customer_arrived())에서 0.7보다 작을 경우 Customer가 입장한 것으로 보고 insert_customer 함수를 통해 enqueuer(큐를 삽입)한다. 이때 random함수를 이용하여 고객의 service_time이 임의 배정되고 고객의 id, 도착시간, 서비스시간을 출력한다.
선입선출의 개념인 Queue이므로 먼저 들어온 고객부터 Server에 배정을 하며 Server가 Customer를 받고 있을 때 들어오는 Customer는 대기하며 Server가 Customer를 받고 있을 경우 service_time이 전체 Clock에 반대하여 줄어들고 service_time이 0일 경우 remove_customer()를 실행한다. 대기 시간은 전체 시간에서 도착시간을 뺀 시간에 더하여 표현한다. 또한dequeuer(큐를 삭제)하여 Customer의 서비스를 끝내고 삭제한다 그 후 각 변수들을 return하고 각 요소들을 출력한다.
remove_customer함수를 불러내어 service_time을 초기화하고 계산한 다음 service_time값을 리턴한다. 그리고 dequeue(큐를 삭제)하여Customer의 서비스를 끝내고 삭제한다. 그 후 각 변수들을 return하고 각 요소들을 출력한다.
Service_idle_time에 대해서는 각 Server가 Customer에게 Service를 제공하지 않을 경우 잉여시간으로 간주하여 service_idle_time을 증가시킨다. 만약 2명의 Server가Service를 제공하지 않을 경우 잉여시간을 2 증가 시키고 마지막에 총 잉여시간을 출력한다.
3. Code
4. 결과
직원 모두가 쉴 경우의 한 주기의 결과이고 이 Clock의 경우 3의 idle_time이 증가한다
'코딩스터디' 카테고리의 다른 글
최소공배수 LCM 구하기 (0) | 2019.09.20 |
---|---|
최대공약수와 유클리드 호제법 (0) | 2019.09.20 |
[JavaScript] C->JS/JS로 Queue 구현 / 미용사 서비스 (0) | 2019.09.09 |
[JavaScript] C->JS/JS로 스택 구현 / 미로찾기 (0) | 2019.09.09 |
Queue를 이용한 미용사 서비스와 고객관리 (0) | 2019.09.09 |