কম্পিউটার টিউটোরিয়াল

পাইথনে সর্বাধিক সোয়াপ (Maximum Swap)

মনে করুন একটি নন-নেগেটিভ পূর্ণসংখ্যা আছে; আমরা সর্বোচ্চ একবার দুটি ডিজিট সোয়াপ করে সর্বাধিক মানবান সংখ্যা পেতে পারি। আমাদের সেই সর্বাধিক মানবান সংখ্যাটি রিটার্ন করতে হবে। যেমন ইনপুট 2736 হলে আউটপুট হবে 7236। এখানে ২ এবং ৭ সোয়াপ করা হয়েছে।

এটি সমাধান করার জন্য আমরা নিচের ধাপগুলো অনুসরণ করব:

  • num := সংখ্যাটির প্রতিটি ডিজিট আলাদা করে একটি তালিকা তৈরি করুন
  • num1 := num কে রিভার্স সর্ট করুন
  • index := 0
  • যখন index < num দৈর্ঘ্য
    • যদি num1[index] num[index] এর সমান না হয়
      • a := num-এর সাবঅ্যারে index+1 থেকে শেষ পর্যন্ত
      • a রিভার্স করুন
      • a := a দৈর্ঘ্য - a-তে num1[index]-এর সূচক + index + 1 - 1
      • num[index], num[a] := num[a], num[index]
      • লুপ ব্রেক করুন
    • index ১ বাড়ান
  • num-এ থাকা সংখ্যাগুলো জুড়ে একটি পূর্ণসংখ্যা তৈরি করুন
  • ফলাফল রিটার্ন করুন।

উদাহরণ (পাইথন)

নিচের ইমপ্লিমেন্টেশনটি দেখুন ভালো বুঝতে:

class Solution:
    def maximumSwap(self, num):
        num = list(map(int, list(str(num))))
        num1 = sorted(num, reverse=True)
        index = 0
        while index < len(num):
            if num1[index] != num[index]:
                a = num[index+1:]
                a.reverse()
                a = len(a) - a.index(num1[index]) + index + 1 - 1
                num[index], num[a] = num[a], num[index]
                break
            index += 1
        return int("".join(str(x) for x in num))

ob1 = Solution()
print(ob1.maximumSwap(5397))

ইনপুট

5397

আউটপুট

9357

  1. পাইথনে ন্যায্য ক্যান্ডি এক্সচেঞ্জ

  2. পাইথনে প্লাস ওয়ান (Plus One)

  3. পাইথনে ম্যাক্সিমাম সাবঅ্যারে (Maximum Subarray)

  4. পাইথন প্রোগ্রাম: তিন সংখ্যার মধ্যে সর্বোচ্চ (Maximum of Three)