মান লিজিয়ে একটি কনফারেন্সে দুটি ধরণের মানুষ আছে। প্রথম ধরণ ভেজিটেরিয়ান লাঞ্চ পছন্দ করে, দ্বিতীয় ধরণ নন-ভেজিটেরিয়ান। কিন্তু প্যাকেট সীমিত। ভেজিটেরিয়ানকে নন-ভেজ প্যাকেট দিলে বা উল্টো হলে সে না নিয়ে নিজের পছন্দের প্যাকেটের জন্য কতেনে থাকবে। দুটি টাইপের প্যাকেট ও মানুষকে ০ (ভেজ) এবং ১ (নন-ভেজ) দিয়ে ডিনোট করা হয়েছে। এখন দুটি অ্যারে দেওয়া আছে: একটি n প্যাকেটের (০ ও ১), অন্যটি m মানুষের কিউ (০ ও ১)। যদি কেউ পছন্দের প্যাকেট না পায়, সে কিউর শেষে চলে যাবে এবং অপেক্ষা করবে। খাবার পাওয়া যেনি মানুষের সংখ্যা বের করতে হবে যাতে তাদের পছন্দের প্যাকেট বানানো যায়।
যেমন, ইনপুট হলে people = [0,1,1,0], packets = [0,1,0,0], তবে আউটপুট হবে 1। দুইজন নন-ভেজ পছন্দ করে কিন্তু প্যাকেট শুধু একটি। লাইনের প্রথম নন-ভেজ পছন্দকারী প্যাকেট পেল, বাকি একজন কেতে থাকল কোনো নন-ভেজ প্যাকেট নেই। তাই আউটপুট ১।
সমাধানের ধাপসমূহ
temp_arr := [0, 0]people-এ প্রতিটিpersonএর জন্য:temp_arr[person] += 1k := 0k < len(packets)থাকা পর্যন্ত:যদি
temp_arr[packets[k]] > 0হয়, তবেtemp_arr[packets[k]] -= 1অন্যথায়, ব্রেক করুন।
k += 1
len(packets) - kরিটার্ন করুন।
উদাহরণ
নিচের ইমপ্লিমেন্টেশনটি দেখুন:
def solve(people, packets):
temp_arr = [0, 0]
for person in people:
temp_arr[person] += 1
k = 0
while k < len(packets):
if temp_arr[packets[k]] > 0:
temp_arr[packets[k]] -= 1
else:
break
k += 1
return len(packets) - k
print(solve([0,1,1,0], [0, 1, 0, 0]))ইনপুট
[0,1,1,0], [0, 1, 0, 0]
আউটপুট
1