99클럽 코테 스터디 28일차 TIL - leetcode relative-ranks(java)

Gaeng·2024년 11월 24일

LeetCode relative-ranks 문제 링크

정렬을 통한 순위 비교
첫번 째 방법으로 문제를 풀었는데,

첫번째 방법: 결과값을 통한 result에 배열로 변환하여 문제풀기


처음 반복문 두번 일일이 정렬했을 때 Memory와 시간복잡도 너무 좋지 않아, 새로운 방법을 통해 ArraysSort와 값을 비교하여 Map를 넣는 방법으로 문제를 다시 해결

  • 배운 점 : 시간복잡도를 생각하면서 문제를 풀어야함.
class Solution {
    public String[] findRelativeRanks(int[] score) {
            String[] result = new String[score.length];
            if(score.length == 1){
                result[0] = String.valueOf("1");
            }else{
            for(int i = 0; i<score.length; i++){
                int rank = score.length;
                for(int j = 0; j<score.length; j++){
                    if(i!=j){
                        if(score[i]>score[j]){
                            rank--;
                            result[i] = String.valueOf(rank);
                        }else{
                           result[i]= String.valueOf(rank);
                        }
                    }
                }
            }}
            for(int i =0; i<score.length; i++){
                if(result[i].equals("1")){
                    result[i] = "Gold Medal";
                }else if(result[i].equals("2")){
                    result[i] = "Silver Medal";
                }else if(result[i].equals("3")){
                    result[i] = "Bronze Medal";
                }
            }
            
            return result;
        }
    }

두번째 방법(ArraysSort, HashMap)

Arrays.sort()를 통해 오름차순 후 반복문을 통해 내림차순을 통해 그 값을 복사한 값과 비교해서 순위 비교

class Solution {
   public String[] findRelativeRanks(int[] score) {
            String[] result = new String[score.length];
            int [] scoreClone = score.clone();
            Map<Integer, String> scoreRank = new HashMap<>();
            int size = score.length;
            Arrays.sort(score);
            for(int i = 0; i<size/2; i++){
                int tmp = score[i];
                score[i] = score[(size-1)-i];
                score[(size-1)-i] = tmp;
            }

            for(int i = 0; i<size; i++){
                if(i==0){
                    scoreRank.put(score[i], "Gold Medal");
                }else if(i==1){
                    scoreRank.put(score[i], "Silver Medal");
                }else if(i==2){
                    scoreRank.put(score[i], "Bronze Medal");
                }else{
                    int rank = Integer.parseInt(String.valueOf(i))+1;
                    scoreRank.put(score[i], String.valueOf(rank));
                }
            }
            for(int i =0 ; i<size; i++){
               result[i] =  scoreRank.get(scoreClone[i]);
            }

            return result;
        }
    }
profile
문제를 해결하면서 나온 문제를 기록하는 노트

0개의 댓글