고객[i] =[arrival_i, time_i] 쌍을 보유하는 배열 고객이 있다고 가정합니다. 여기서 arrival_i는 i번째 고객의 도착 시간입니다. 그리고 도착 시간은 낮은 것에서 높은 것으로 정렬됩니다. 그리고 time_i는 i번째 고객의 주문을 준비하는 데 필요한 시간입니다. 이제 고객이 도착하면 주문을 하고 요리사가 한가할 때 주문한 사람만 준비를 시작합니다. 요리사는 한 번에 한 명 이상의 고객을 위해 음식을 준비하지 않습니다. 그리고 명령을 받은 순서대로 준비합니다. 모든 고객의 평균 대기 시간을 찾아야 합니다.
따라서 입력이 고객 =[[7,2],[8,4],[10,3],[20,1]]과 같으면 출력은 3.5가 됩니다.
-
7시에 첫 손님이 오시고, 7시에 요리사가 주문을 받고 바로 요리를 시작하고, 9시에 끝내기 때문에 첫 손님의 대기 시간은 9 - 7 =2입니다.
-
두 번째 손님은 8시에 왔고 요리사는 주문을 받고 9시에 요리를 시작하고 13시에 끝내므로 두 번째 손님의 대기 시간은 13 - 8 =5입니다.
-
세 번째 손님은 10시에 왔고 요리사는 주문을 받고 13시에 요리를 시작하고 16시에 끝내므로 세 번째 손님의 대기 시간은 16 - 10 =6입니다.
-
20시에 네 번째 손님이 오시고, 20시에 주방장이 주문을 받고 바로 요리를 시작하여 21시에 마치므로 네 번째 손님의 대기 시간은 21 - 20 =1입니다.
-
따라서 평균 대기 시간 =(2 + 5 + 6 + 1) / 4 =3.5입니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- arr :=새 목록
- 시간 :=0
- 고객의 각 쌍(i, j)에 대해 다음을 수행합니다.
- 만약 내가> 시간이면
- 시간 :=i + j
- 그렇지 않으면
- 시간 :=시간 + j
- 만약 내가> 시간이면
- arr 끝에 (time-i) 삽입
- return(arr의 모든 항목 평균)
예
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
def solve(customers): arr = [] time = 0 for i , j in customers: if(i > time): time = i + j else: time += j arr.append(time - i) return sum(arr) / len(arr) customers = [[7,2],[8,4],[10,3],[20,1]] print(solve(customers))
입력
[[7,2],[8,4],[10,3],[20,1]]
출력
3