N সংখ্যক এথলিটের স্কোর দেওয়া আছে। তাদের রিলেটিভ র্যাঙ্ক বের করতে হবে। টপ ৩ স্কোরের জন্য মেডেল: "Gold", "Silver", "Bronze"। বাকিদের জন্য র্যাঙ্ক নম্বর।
উদাহরণ: ইনপুট [2,5,3,1,0] হলে আউটপুট [Bronze, Gold, Silver, 4, 5]।
সমাধানের ধাপসমূহ
- যদি আকার ১ হয়, {"Gold"} রিটার্ন করুন।
- যদি আকার ২ হয়, বড়টি "Gold", ছোটটি "Silver"।
- বड़े আকারের জন্য: স্কোর কপি করে সর্ট এবং রিভার্স করুন।
- ম্যাপে টপ ৩-র জন্য মেডেল, বাকির জন্য স্ট্রিং র্যাঙ্ক সংরক্ষণ করুন।
- মূল অরেটানुसারে ম্যাপ থেকে র্যাঙ্ক বের করুন।
C++ কোড উদাহরণ
#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<auto> v) {
cout << "[";
for (int i = 0; i < v.size(); i++) {
cout << v[i] << ", ";
}
cout << "]" << endl;
}
class Solution {
public:
vector<string> findRelativeRanks(vector<int>& nums) {
if (nums.size() == 1) return { "Gold" };
if (nums.size() == 2) {
if (nums[0] > nums[1]) return { "Gold", "Silver" };
else return { "Silver", "Gold" };
}
vector<int> v;
vector<string> vec;
for (int i = 0; i < nums.size(); i++) v.push_back(nums[i]);
sort(v.begin(), v.end());
reverse(v.begin(), v.end());
map<int, string> mp;
if (nums.size() > 2) {
mp.insert({v[0], "Gold" });
mp.insert({v[1], "Silver" });
mp.insert({v[2], "Bronze" });
for (int i = 3; i < v.size(); i++) {
mp.insert({ v[i], to_string(i + 1) });
}
for (int i = 0; i < nums.size(); i++)
vec.push_back(mp[nums[i]]);
}
return vec;
}
};
int main() {
Solution ob;
vector<int> v = {2,5,3,1,0};
print_vector(ob.findRelativeRanks(v));
return 0;
}
ইনপুট
{2,5,3,1,0}
আউটপুট
[Bronze, Gold, Silver, 4, 5, ]