[99클럽 코테 스터디 28일차 TIL] LeetCode 506. Relative Ranks

말하는 감자·2024년 11월 24일
0
post-thumbnail

99클럽 코테 스터디 28일차 TIL

💙 JAVA 비기너

📌 오늘의 학습 키워드

  • 해쉬, 힙(우선순위 큐)

📌 공부한 내용

📍 오늘의 문제

📍 작성 코드

import java.util.PriorityQueue;
import java.util.Collections;
import java.util.HashMap;

class Solution {
    public String[] findRelativeRanks(int[] score) {
        PriorityQueue<Integer> rankQueue = new PriorityQueue<>(Collections.reverseOrder());
        HashMap<Integer, Integer> rankHash = new HashMap<>();

        for(int i=0; i<score.length; i++) {
            int x = score[i];
            rankQueue.add(x);
            rankHash.put(x, i);
        }

        String[] rank = new String[score.length];
        int rankNum = 1;
        while(!rankQueue.isEmpty()) {
            int scoreNum = rankQueue.poll();
            int index = rankHash.get(scoreNum);
            String rankString = "";
            if(score[index] == scoreNum) {
                switch(rankNum) {
                    case 1 :
                        rankString = "Gold Medal";
                        break;
                    case 2 :
                        rankString = "Silver Medal";
                        break;
                    case 3 :
                        rankString = "Bronze Medal";
                        break;
                    default :
                        rankString = String.valueOf(rankNum);
                }
                rank[index] = rankString;
                rankNum++;
            }
        }
        return rank;
    }
}

📌 오늘의 회고

어제 문제와 마찬가지로 해시와 힙(우선순위 큐)를 함께 사용한 문제이다.
🎈 올해의 양조장 문제 보러가기

점수를 내림차순으로 정렬해줄 Heap rankQueue와 점수를 저장한 정수 배열 score에서 해당 점수의 위치와 점수를 저장할 HashMap rankHash를 선언한 후 score의 정보를 넣어주었다.

rankQueue를 하나씩 반환하면서 첫번째 요소라면 "Gold Medal"를, 두번째 요소라면 "Silver Medal"를, 3번째 요소라면 "Bronze Medal"를, 그 외의 요소라면 해당 순번을 문자열 배열인 rank에 넣어주도록 한다. 이 때 rank에서의 위치는 score와 동일해야하므로 rankHash에서 위치를 찾아 rank의 해당 위치에 저장해준다.

profile
나는 말하는 감자다

0개의 댓글