n সংখ্যক স্ট্রিং সম্বিষ্ট একটি names অ্যারে দেওয়া আছে। আমাদের nটি ডিরেক্টরি তৈরি করতে হবে যাতে i-তম মিনিটে names[i] নামে ডিরেক্টরি বানানো হয়। দুটি ফাইল একই নাম ধারণ করতে পারবে না। ডুপ্লিকেট নাম আসলে সিস্টেম অটোমেটিক্যালি (k) সাফিক্স যোগ করবে, যেখানে k হলো সেটি ইউনিক রাখার জন্য ন্যূনতম ধনাত্মক পূর্ণসংখ্যা। আমাদের কাজ হলো প্রতিটি ডিরেক্টরির প্রকৃত নাম ধারণকারী অ্যারে ফেরত দেওয়া।
যেমন, names = ["my_dir","my_dir(1)","my_new_dir","my_new_dir","abc"] হলে আউটপুট: ['my_dir', 'my_dir(1)', 'my_new_dir', 'my_new_dir(1)', 'abc']।
সমাধানের ধাপসমূহ
- dic := একটি ম্যাপ (ডিফল্ট মান ০)
- res := খালি লিস্ট
- names-এর প্রতিটি name এর জন্য:
- যদি name dic-এ নেই, তবে dic[name] := dic[name] + 1, res-এ name যোগ করুন।
- অন্যথায়:
- newname := name + '(' + dic[name] + ')'
- যখন newname dic-এ আছে, তখন dic[name] বাড়ান এবং newname আপডেট করুন।
- dic[newname] := 1, res-এ newname যোগ করুন।
- res ফেরত দিন।
উদাহরণ
from collections import defaultdict
def solve(names):
dic = defaultdict(int)
res = []
for name in names:
if name not in dic:
dic[name] += 1
res.append(name)
else:
newname = name + '(' + str(dic[name]) + ')'
while newname in dic:
dic[name] += 1
newname = name + '(' + str(dic[name]) + ')'
dic[newname] = 1
res.append(newname)
return res
names = ["my_dir","my_dir(1)","my_new_dir","my_new_dir","abc"]
print(solve(names))
ইনপুট
["my_dir","my_dir(1)","my_new_dir","my_new_dir","abc"]
আউটপুট
['my_dir', 'my_dir(1)', 'my_new_dir', 'my_new_dir(1)', 'abc']