মনে করুন customers নামক একটি অ্যারে আছে যেখানে customers[i] = [arrival_i, time_i], এখানে arrival_i হলো i-তম কাস্টমারের আগমন সময়। আগমন সময়গুলো ছোট থেকে বড় ক্রমে সর্টেড। time_i হলো i-তম কাস্টমারের অর্ডার প্রস্তুত করার জন্য প্রয়োজনীয় সময়। কাস্টমার আসলে অর্ডার দেয়, এবং শুধু সেই অর্ডার প্রস্তুতি শুরু হয় যখন রাঁধুনি बेकार থাকে। রাঁধুনি একবারে একাধিক কাস্টমারের জন্য রান্না করে না। এবং অর্ডার দেয়া ক্রম অনুযায়ী রান্না করে। সব কাস্টমারের গড় অপেক্ষা সময় বের করতে হবে।
যেমন, ইনপুট customers = [[7,2],[8,4],[10,3],[20,1]] হলে, আউটপুট হবে 3.5 কারণ:
প্রথম কাস্টমার সময় ৭-এ এল, রাঁধুনি তৎক্ষণ শুরু করে সময় ৭-এ এবং সময় ৯-এ শেষ করে, তাই প্রথম কাস্টমারের অপেক্ষা সময় ৯ - ৭ = ২।
দ্বিতীয় কাস্টমার সময় ৮-এ এল, রাঁধুনি তার অর্ডার সময় ৯-এ শুরু করে এবং ১৩-এ শেষ করে, অপেক্ষা সময় ১৩ - ৮ = ৫।
তৃতীয় কাস্টমার সময় ১০-এ এল, রাঁধুনি ১৩-এ শুরু করে এবং ১৬-এ শেষ করে, অপেক্ষা সময় ১৬ - ১০ = ৬।
চতুর্থ কাস্টমার সময় ২০-এ এল, রাঁধুনি তৎক্ষণ ২০-এ শুরু করে এবং ২১-এ শেষ করে, অপেক্ষা সময় ২১ - ২০ = ১।
গড় অপেক্ষা সময় = (২ + ৫ + ৬ + ১) / ৪ = 3.5।
সমাধান পদ্ধতি
এই সমস্যাটি সমাধান করতে নিচের ধাপগুলো অনুসরণ করুন:
- arr := একটি নতুন লিস্ট
- time := 0
- customers-এ থাকা প্রতিটি (i, j) জোড়ার জন্য
- যদি i > time হয়, তবে
- time := i + j
- অন্যথায়,
- time := time + j
- arr-এ (time - i) অ্যাপেন্ড করুন
- যদি i > time হয়, তবে
- 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