Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 상대 순위

<시간/>

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, ]