สมมติว่าเรามีอาร์เรย์ customers โดย customers[i] เก็บคู่ [arrival_i, time_i] arrival_i คือเวลาที่ลูกค้าคนที่ i มาถึง เวลามาถึงเรียงจากน้อยไปมาก time_i คือเวลาที่ต้องใช้เตรียมออเดอร์ของลูกค้าคนที่ i ตอนนี้ เมื่อลูกค้ามาถึง เขาสั่งออเดอร์ และออเดอร์นั้นเริ่มเตรียมเมื่อเชฟว่าง เชฟไม่เตรียมอาหารให้มากกว่าหนึ่งลูกค้าในเวลาเดียวกัน และเตรียมตามลำดับที่สั่ง เราต้องหาเวลารอเฉลี่ยของลูกค้าทั้งหมด
เช่น ถ้าอินพุตคือ customers = [[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 := รายการใหม่
- time := 0
- สำหรับแต่ละคู่ (i, j) ใน customers:
- ถ้า i > time: time := i + j
- มิฉะนั้น: time := time + j
- แทรก (time-i) ลงท้าย arr
- return (ค่าเฉลี่ยของทุก item ใน 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