আমাদের একটি উপাদানের অ্যারে দেওয়া আছে, এবং আমাদের সব উপাদানকে ১ দিয়ে ইনক্রিমেন্ট করে সমান করতে হবে। আমাদের প্রতিটি স্টেপে n-1টি উপাদান ইনক্রিমেন্ট করার অনুমতি আছে। আমাদের লক্ষ্য হলো সব অ্যারে এলিমেন্ট সমান করার জন্য মোট কতটি অপারেশন প্রয়োজন তা বের করা।
উদাহরণস্বরূপ, লিস্ট [1, 2, 3] নিলে তিনটি অপারেশনে সব উপাদান সমান করা যায়। একটা সমাধান হলো প্রতিটি স্টেপে সর্বোচ্চ সংখ্যা বের করে বাকি সব উপাদান ১ দিয়ে ইনক্রিমেন্ট করা। কোডটি লিখি।
উদাহরণ
def main():
# অ্যারে ইনিশিয়ালাইজ
arr = [1, 2, 3]
# অপারেশন কাউন্ট ০ দিয়ে ইনিশিয়ালাইজ
no_of_operations = 0
flag = 0
# অ্যারে সমান করার জন্য অপারেশন
while not are_equal(arr):
flag = 1
# লিস্ট থেকে সর্বোচ্চ বের করা
maximum = max(arr)
# সর্বোচ্চ বাদে সব উপাদান ইনক্রিমেন্ট
for i in range(len(arr)):
if arr[i] != maximum:
arr[i] += 1
# অপারেশন কাউন্ট ১ বাড়ানো
no_of_operations += 1
print(no_of_operations) if flag == 0 else print(no_of_operations + 1)
# সব উপাদান সমান কিনা চেক
def are_equal(arr):
global no_of_operations
for i in range(len(arr) - 1):
if arr[i] != arr[i + 1]:
return False
return True
if __name__ == '__main__':
main()
আউটপুট
উপরোক্ত প্রোগ্রাম চালালে নিচের ফলাফল পাওয়া যাবে:
3
উপরের মেথড বড় অ্যারের জন্য বেশি সময় নেয়। আমরা অ্যারের যোগফল এবং সর্বনিম্ন উপাদান বের করে অপারেশনের সংখ্যা বের করতে পারি।
- অ্যারের যোগফল বের করুন।
- সব উপাদানের মধ্যে সর্বনিম্ন বের করুন।
sum - (length * smallest)এক্সপ্রেশন থেকে ভ্যালু প্রিন্ট করুন।
উদাহরণ
নিচের কোডটি দেখুন:
# একটি অ্যারে ইনিশিয়ালাইজ arr = [1, 2, 3] # দৈর্ঘ্য length = len(arr) # অ্যারে এলিমেন্টের যোগফল elements_sum = sum(arr) # সব উপাদানের মধ্যে সর্বনিম্ন smallest = min(arr) # অপারেশনের সংখ্যা ক্যালকুলেট print(elements_sum - (length * smallest))
আউটপুট
উপরোক্ত কোড চালালে নিচের ফলাফল পাওয়া যাবে:
3
উপসংহার
আমরা যে দ্বিতীয় মেথডটি আলোচনা করেছি তা সহজ এবং কম সময় নেয়। টিউটোরিয়াল সম্পর্কে কোনো প্রশ্ন থাকলে কমেন্ট সেকশনে জানাতে পারেন।