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
의 해당 위치에 저장해준다.