[99클럽 28일차] [LeetCode] 506. Relative Ranks

Dev.Dana·2024년 11월 24일
0

Algorithm

목록 보기
21/25
post-thumbnail

[LeetCode] 506. Relative Ranks

문제 설명

주어진 선수들의 점수 배열에서 각 선수의 랭킹을 출력하는 문제
상위 3명의 선수에게는 각각 “Gold Medal”, “Silver Medal”, “Bronze Medal”이라는 랭킹을 주고, 나머지 선수들에게는 해당 순위 번호를 준다.

입출력 예시:

  • 입력 : score = [10, 3, 8, 9, 4]
  • 출력 : ["Gold Medal", "5", "Bronze Medal", "Silver Medal", "4"]

내가 헷갈렸던 점

처음에는 점수를 정렬한 후 바로 랭킹을 부여하려 했다. 하지만 정렬 후에는 원래 배열의 순서가 없어지기 때문에 정렬된 결과를 원래 배열 순서에 다시 매핑할 수 가 없다.
-> 점수와 원래 인덱스를 함께 저장하면 해결할 수 있다.

처음에는 단순히 배열만을 사용하려 했지만 정렬 후에도 원래 인덱스를 유지해야 했기 때문에 점수와 인덱스를 쌍으로 저장하는 2차원 배열을 사용해서 문제를 풀어보았다.

문제 해결 과정

2차원 배열을 사용하여 원래 score의 인덱스 정보도 유지하도록 한다.
int[][] indexedScores = new int[score.length][2];

정렬은 점수를 내림차순으로 해야하기에 Comparator를 사용했다.
Arrays.sort(indexedScores, (a, b) -> b[0] - a[0]); -> 점수 기준 내림차순

랭킹은 정렬 순서대로 부여하고, 최종 출력은 원래 점수 순서에 맞춰야 한다.
-> 원래 인덱스를 기반으로 랭킹 결과를 저장

최종 코드

import java.util.*;

class Solution {
    public String[] findRelativeRanks(int[] score) {
        String[] answer = new String[score.length];
        int[][] indexedScores = new int[score.length][2];
        
        for (int i = 0; i < score.length; i++) {
            indexedScores[i][0] = score[i];
            indexedScores[i][1] = i;
        }
        
        // 점수를 기준으로 내림차순 정렬
        Arrays.sort(indexedScores, (a, b) -> b[0] - a[0]);

        // 랭킹 부여
        for (int rank = 0; rank < score.length; rank++) {
            int originalIndex = indexedScores[rank][1]; // 원래 인덱스
            if (rank == 0) {
                answer[originalIndex] = "Gold Medal";
            } else if (rank == 1) {
                answer[originalIndex] = "Silver Medal";
            } else if (rank == 2) {
                answer[originalIndex] = "Bronze Medal";
            } else {
                answer[originalIndex] = String.valueOf(rank + 1); // 순위를 문자열로 변환
            }
        }

        return answer;
    }
}

후기

정렬 후 원래 데이터를 복구하려면 원래 인덱스 정보를 유지하는 자료구조가 필요하다!! Comparator써서 정렬하는것 손에 익게하자!!

profile
어제의 나보단 나은 오늘의 내가 되기를

1개의 댓글

comment-user-thumbnail
2024년 11월 25일

혹시 맞팔 가능하시면 맞팔해서 함께 공부해요

답글 달기