Free Lines Arrow
본문 바로가기
Algorithm/해커랭크

[Hacker Rank] Climbing the Leaderboard

by skahn1215 2022. 10. 23.
728x90
반응형

문제

 

분석

  • 랭크가 있고, 플레이어 점수가 있다 이둘을 매칭 시켜서
    플레이어의 순위를 구한다.
  • 근사값을 구해야 된다. 근사값을 구하기 위해서
    - NavigableSet 을 이용하면 된다
  • NavigableSet.higher
    - 주어진 값보다 큰값
  • NavigableSet.lower
    - 주어진 값보다 낮은 값
  • NavigableSet.floor
  • NavigableSet.ceiling

 

구현

    /*
     * Complete the 'climbingLeaderboard' function below.
     *
     * The function is expected to return an INTEGER_ARRAY.
     * The function accepts following parameters:
     *  1. INTEGER_ARRAY ranked
     *  2. INTEGER_ARRAY player
     */

    public static List<Integer> climbingLeaderboard(List<Integer> ranked, List<Integer> player) {
    // Write your code here
    
    List<Integer> resultList = new ArrayList<>();
    NavigableSet<Integer> ns = new TreeSet<>();

    Map<Integer, Integer> rankInfoMap = new HashMap<>();
   
    for (int i =0; i < ranked.size(); i++) {
        ns.add(ranked.get(i));
    }
    ns = ns.descendingSet();
    
    int rank = 1;
    Iterator<Integer> iter = ns.iterator();
    while(iter.hasNext()) {
        int a = iter.next();
        rankInfoMap.put(a, rank++);
    }
    
    int playerScore = 0;
    for (int i = 0; i < player.size(); i++) {
            playerScore = player.get(i);
            if (playerScore > ns.first()) {
                resultList.add(1);
            } else if (playerScore < ns.last()) {
                resultList.add(rankInfoMap.get(ns.ceiling(ns.last()))+1);
            } else {
                resultList.add(rankInfoMap.get(ns.ceiling(playerScore)));   
            }
    }
    
    return resultList;
    }

}

 

 

결과

728x90
반응형

댓글