মনে করুন আমাদের n সিটের রিজারভেশন স্টেট ম্যানেজ করার একটি সিস্টেম ডিজাইন করতে হবে। সিটগুলো 1 থেকে n পর্যন্ত নম্বর করা আছে। সুতরাং আমাদের SeatReserveManager ক্লাস ইমপ্লিমেন্ট করতে হবে, এই ফাংশনগুলোসহ −
কনস্ট্রাক্টর যা n ইনপুট হিসেবে নেবে এবং 1 থেকে n পর্যন্ত নম্বর করা n সিট ম্যানেজ করার অবজেক্ট ইনিশিয়ালাইজ করবে। ابتدায় সব সিট উপলব্ধ।
reserve(), এটি সবচেয়ে ছোট নম্বরের অনরিজার্ভড সিট বের করবে, সেটি রিজার্ভ করবে, এবং এর নম্বর রিটার্ন করবে।
unreserve(seatNumber), এটি দেয়া seatNumber-ওয়ালা একটি রিজার্ভড সিট অনরিজার্ভ করবে।
সুতরাং, যদি ইনপুট হয়
obj = SeatReserveManager(7)
obj.reserve()
obj.reserve()
obj.reserve()
obj.unreserve(2)
obj.unreserve(5)
obj.reserve()
obj.reserve()
তবে আউটপুট হবে 1, 2, 3, 2, 5, ابتداয় তিনটি সিট 1, 2, 3 রিজার্ভ, তারপর 2 এবং 5 অনরিজার্ভ কিন্তু 5 রিজার্ভড ছিল না, তারপর 5 আবার রিজার্ভ।
এটি সমাধান করতে আমরা নিচের ধাপগুলো অনুসরণ করব −
কনস্ট্রাক্টর() ডিফাইন করুন। এটি n নেবে
current_seat := 0
empty_seats := একটি নতুন তালিকা
reserve() ফাংশন ডিফাইন করুন। এটি নেবে
যদি empty_seats-এর দৈর্ঘ্য > 0 হয়, তবে
s := empty_seats-এর ন্যূনতম
empty_seats থেকে s মুছে দিন
s রিটার্ন করুন
current_seat := current_seat + 1
current_seat রিটার্ন করুন
unreserve() ফাংশন ডিফাইন করুন। এটি seatNumber নেবে
empty_seats-এর শেষে seatNumber ইনসার্ট করুন
উদাহরণ
বेहतर বোঝার জন্য নিচের ইমপ্লিমেন্টেশন দেখুন −
class SeatReserveManager:
def __init__(self, n):
self.current_seat = 0
self.empty_seats = []
def reserve(self):
if len(self.empty_seats) > 0:
s = min(self.empty_seats)
self.empty_seats.remove(s)
return s
self.current_seat += 1
return self.current_seat
def unreserve(self, seatNumber):
self.empty_seats.append(seatNumber)
obj = SeatReserveManager(7)
print(obj.reserve())
print(obj.reserve())
print(obj.reserve())
obj.unreserve(2)
obj.unreserve(5)
print(obj.reserve())
print(obj.reserve())
ইনপুট
obj = SeatReserveManager(7) print(obj.reserve()) print(obj.reserve()) print(obj.reserve()) obj.unreserve(2) obj.unreserve(5) print(obj.reserve()) print(obj.reserve())
আউটপুট
1 2 3 2 5