Pokeball - Pokemon

99클럽 TIL

99클럽 코테 스터디 28일차 TIL + 해시(C++)

ansi. 2024. 11. 25. 00:21

문제

[리트코드] Relative Ranks

https://leetcode.com/problems/relative-ranks/

 

코드

class Solution {
public:
    vector<string> findRelativeRanks(vector<int>& score) {
        vector<string> answer;
        unordered_map<int, string> m; // 점수, 등수(또는 메달)을 저장

        vector<int> v = score;
        sort(v.begin(), v.end(), greater<int>());

        int rank = 1;
        for (auto x : v) {
            if (rank == 1)
                m[x] = "Gold Medal";
            else if (rank == 2)
                m[x] = "Silver Medal";
            else if (rank == 3)
                m[x] = "Bronze Medal";
            else
                m[x] = to_string(rank);

            rank++;
        }

        for (auto s : score) {
            answer.push_back(m[s]);
        }

        return answer;
    }
};

 

풀이

score 배열에 저장된 순서대로 각 원소(점수)들의 등수를 출력해야 하는 문제.

따라서 해시맵을 사용해 점수와 등수를 key-value 쌍으로 저장한다.

  1. 우선 점수를 높은 순으로 정렬한다. 이때, 원래 점수 배열인 score을 정렬할 경우 기존 순서가 망가지기 때문에 복사본 v를 생성해 점수를 정렬한다.
  2. 이후, 정렬한 배열 v를 순회하면서 각 점수를 key, 등수(또는 메달)를 value로 하여 해시맵에 저장한다.
  3. 이때, 등수를 지정하기 위해 rank라는 변수를 생성해 반복문을 돌때마다 rank를 1씩 증가시켜 rank 값에 따라 메달, 또는 등수를 value로 설정한다.
  4. 이후 score 배열을 순회하면서 score 배열의 원소 s에 대해 s를 key로 가지는 해시맵의 value를 answer 배열에 삽입한다.
  5. 마지막으로 answer 배열을 반환하고 종료한다.