এই প্রোগ্রামে একটি পজিটিভ ইন্টিজার লিস্টকে ডিসেন্ডিং অর্ডারে সর্ট করে সব উপাদানকে একসাথে জয়েন করে একটি স্ট্রিং তৈরি করা হয়।
সমস্যা বিবরণ
ইনপুট: [415, 78, 954, 123, 5]
আউটপুট: 954785415123
সমাধানের পদ্ধতি
- একটি কাস্টম কম্পারেটর ফাংশন
cmp()ডিফাইন করুন যা দুটি সংখ্যাlএবংrতুলনা করে। - যদি
int(str(l) + str(r)) > int(str(r) + str(l))হয়, তবে1রিটার্ন করুন, অন্যথায়-1। - লিস্টকে এই কম্পারেটর ব্যবহার করে সর্ট করুন (
reverse=Trueসহ)। - সর্ট করা লিস্টের সব উপাদানকে
join()করে স্ট্রিং বানান।
পাইথন কোড
from functools import cmp_to_key
def cmp(l, r):
if int(str(l) + str(r)) > int(str(r) + str(l)):
return 1
else:
return -1
def solve(input_list):
input_list.sort(key=cmp_to_key(cmp), reverse=True)
return "".join(map(str, input_list))
# টেস্ট
print(solve([415, 78, 954, 123, 5])) # আউটপুট: 954785415123
কীভাবে কাজ করে
কম্পারেটর দুটি সংখ্যার কনক্যাটেনেটেড ভ্যালু তুলনা করে বড় সংখ্যা তৈরি করার অর্ডার নির্ধারণ করে। উদাহরণস্বরূপ, 954 এবং 78-এর জন্য: 95478 > 78954, তাই 954 আগে আসবে।