개발 공부용

[Leetcode] 506. Relative Ranks 본문

코딩 테스트/99클럽 TIL

[Leetcode] 506. Relative Ranks

솝제로 2025. 2. 12. 10:40
문제
배열 score를 보고 순위를 확인하라
1위, 2위, 3위는 각각 금메달, 은메달, 동메달이 되며 나머지는 순위를 출력한다.
 

입력
  • 점수가 적힌 배열 score(1<=len(sxore)<=10,000)
  • 0<=점수<=1,000,000이며 같은 점수는 없음

출력
  • 메달 혹은 순위가 적힌 배열

풀이방법
  1. 각 점수를 딕셔너리의 key로 선언
  2. score를 힙에 정렬한 뒤 한 개씩 pop하면서 순위 부여
  3. 1~3까지 메달 부여하고 나머지는 순위로
  4. score 순서대로 딕셔너리에서 value 찾아 result 리스트에 넣음
  5. result 출력

 

작성한 코드
import heapq
class Solution:
    def findRelativeRanks(self, score: List[int]) -> List[str]:
        score = [-i for i in score]
        origin_score = []
        origin_score = score.copy()

        result_dic = {i:"0" for i in score}
        result = []
        heapq.heapify(score)
        if(len(score)!=0):
            result_dic[heapq.heappop(score)]="Gold Medal"
        if(len(score)!=0):
            result_dic[heapq.heappop(score)]="Silver Medal"
        if(len(score)!=0):
            result_dic[heapq.heappop(score)]="Bronze Medal"
        place = 4

        for _ in range(len(score)):
            result_dic[heapq.heappop(score)]=str(place)
            place+=1
                        

        result = [result_dic[key] for key in origin_score]
        return result

 

if문 3번 반복한 부분도 좀 마음에 안들고 딕셔너리도 괜히 쓴 것 같아서 나중에 다시 풀 생각...