코딩 테스트/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이며 같은 점수는 없음
출력
- 메달 혹은 순위가 적힌 배열
풀이방법
- 각 점수를 딕셔너리의 key로 선언
- score를 힙에 정렬한 뒤 한 개씩 pop하면서 순위 부여
- 1~3까지 메달 부여하고 나머지는 순위로
- score 순서대로 딕셔너리에서 value 찾아 result 리스트에 넣음
- 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번 반복한 부분도 좀 마음에 안들고 딕셔너리도 괜히 쓴 것 같아서 나중에 다시 풀 생각...