N명의 선수 점수 목록이 있다고 가정하고 상대 순위와 상위 3개 최고 점수를 가진 사람들을 찾아야 합니다. "금", "은" 및 "동" 메달은 서로 다릅니다.
따라서 입력이 [2,5,3,1,0]과 같으면 출력은 [Bronze,Gold,Silver,4,5]
가 됩니다.이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
숫자의 크기가 1과 같으면 -
-
"골드" 반환
-
-
숫자의 크기가 2와 같으면 -
-
nums[0]> nums[1]이면 -
-
"골드", "실버" 반환
-
-
그렇지 않으면
-
"실버", "골드" 반환
-
-
-
배열 정의 v
-
DDefine 배열 vec
-
initialize i :=0의 경우, i <숫자의 크기일 때 업데이트(i를 1만큼 증가), 수행 -
-
v
끝에 nums[i] 삽입
-
-
배열 v
정렬 -
배열 v
반전 -
하나의 맵 MP 정의
-
숫자의 크기가 2보다 크면 -
-
mp에 {v[0], "Gold" } 삽입
-
mp에 {v[1], "Silver" } 삽입
-
mp에 {v[2], "Bronze" } 삽입
-
initialize i :=3의 경우, i
-
mp에 { v[i], i + 1 as string} 삽입
-
-
initialize i :=0의 경우, i <숫자의 크기일 때 업데이트(i를 1만큼 증가), 수행 -
-
vec
끝에 mp[nums[i]] 삽입
-
-
-
반환 벡터
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
#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; } }; main(){ Solution ob; vector<int> v = {2,5,3,1,0}; print_vector(ob.findRelativeRanks(v)); }
입력
{2,5,3,1,0}
출력
[Bronze, Gold, Silver, 4, 5, ]