Algorithm/hackerrank

[hackerrank] Climbing the Leaderboard(c++)

1일1코딩 2020. 10. 21. 23:21

www.hackerrank.com/challenges/climbing-the-leaderboard/problem

 

Climbing the Leaderboard | HackerRank

Help Alice track her progress toward the top of the leaderboard!

www.hackerrank.com

 

풀이과정

1. ranked는 내림차순(4,3,2,1)으로 정렬되어 있으며, player는 오름차순(1,2,3,4)이다.

2. 중복값은 같은 등수로 처리되기 때문에 원소에서 제거하고 시작하였다.

3. 꼴등부터 시작하여 현재 Player의 점수보다 현재 랭킹점수가 더 크면 반복문을 종료하여 현재 랭크를 정해준다.

4. player는 오름차순이므로 다음 플레이어는 현재 플레이어보다 등수가 크거나 같다. 따라서 이전에 저장해둔 랭킹 지점을 이용하여 이전 마지막 지점부터 시작하도록 설계하였다. 

 

소스코드

더보기
vector<int> climbingLeaderboard(vector<int> ranked, vector<int> player) {
    vector<int> answer;
    ranked.erase(unique(ranked.begin(), ranked.end()), ranked.end());
    int idx = ranked.size() - 1;
    int rank = ranked.size() + 1;
    //ranked는 내림차순 4,3,2,1
    //player는 오름차순 1,2,3,4
    for (int i = 0; i < player.size(); i++) {
        if (player[i] < ranked[ranked.size() - 1]) {
            answer.push_back(ranked.size() + 1);
        }
        else if (player[i] >= ranked[0]) {
            answer.push_back(1);
        }
        else {
            while (player[i] >= ranked[idx]) {
                idx--;
                rank--;
            }
            answer.push_back(rank);
        }
    }
    return answer;
}