누가 뭐래도 개발자 2025. 3. 18. 00:58

 

pair, map을 활용하는 문제는 어렵지 않은데, 자주 막히는 부분은 수학적 사고와 관련된 부분 같다.

많이 풀어보고 사고해야 실력이 발전한다.

사고를 하는 과정을 거치지 않으면 얻을 수 있는 걸 얻지 못하고 문제를 버리는거야.

 

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

vector<int> solution(vector<vector<int>> score) {
    vector<int> answer(score.size());
    vector<pair<double, int>> avg; //average, idx
    avg.reserve(10);

    for (int i = 0; i < score.size(); ++i)
    {
        avg.push_back({ (double)(score[i][0] + score[i][1])/2.0, i});
    }

    sort(avg.begin(), avg.end(), [](const auto& a, const auto& b) {return a.first > b.first; });

    int rank = 0;
    int count = 0; //공동 등수
    for (int i = 0; i < avg.size(); ++i)
    {
        if (avg[0] != avg[i] && avg[i].first == avg[i - 1].first)
        {
            ++count;
        }
        else
        {
            ++rank += count;
            count = 0;
        }

        answer[avg[i].second] = rank;
    }

    return answer;
}