মান लीজিয়ে আমাদের কাছে একটি সংখ্যা n আছে, যেখানে n জন মানুষ আসন খুঁজছেন। আমাদের কাছে একটি বিটের তালিকাও আছে যেখানে 1 উপস্থিত করে ইতিমধ্যে দখল করা আসন এবং 0 উপস্থিত করে খালি আসন। দুজন মানুষ পাশাপাশি বসে না, তাই আমাদের যাচাই করতে হবে যে সব n জন মানুষ আসন পেতে পারেন কিনা।
উদাহরণস্বরূপ, ইনপুট যদি n = 2 এবং seats = [1, 0, 0, 0, 1, 0, 0] হয়, তবে আউটপুট হবে True, কারণ তারা ২ এবং ৬ নম্বর ইনডেক্সে বসতে পারেন।
এটি সমাধান করার জন্য আমরা নিচের ধাপগুলো অনুসরণ করব:
- seats তালিকার শুরুতে ০ যোগ করুন এবং শেষে [0, 1] যোগ করুন
- res := 0, gap := 0
- seats তালিকার প্রতিটি i এর জন্যループ চালান:
- যদি i ০ এর সমান হয়, তবে
- gap := gap + 1
- অথবা যদি gap > 0 হয়, তবে
- res := res + floor((gap - 1)/2)
- gap := 0
- যদি i ০ এর সমান হয়, তবে
- যদি res >= n হয় তবে true রিটার্ন করুন, অন্যথায় false
উদাহরণ
নিচের ইমপ্লিমেন্টেশনটি দেখুন ভালো বুঝতে:
def solve(n, seats):
seats = [0] + seats + [0, 1]
res = 0
gap = 0
for i in seats:
if i == 0:
gap += 1
elif gap > 0:
res += (gap - 1) // 2
gap = 0
return res >= n
n = 2
seats = [1, 0, 0, 0, 1, 0, 0]
print(solve(n, seats))ইনপুট
2, [1, 0, 0, 0, 1, 0, 0]
আউটপুট
True