506. Relative Ranks
Easy
You are given an integer array score
of size n
, where score[i]
is the score of the ith
athlete in a competition. All the scores are guaranteed to be unique.
The athletes are placed based on their scores, where the 1st
place athlete has the highest score, the 2nd
place athlete has the 2nd
highest score, and so on. The placement of each athlete determines their rank:
- The
1st
place athlete's rank is"Gold Medal"
. - The
2nd
place athlete's rank is"Silver Medal"
. - The
3rd
place athlete's rank is"Bronze Medal"
. - For the
4th
place to thenth
place athlete, their rank is their placement number (i.e., thexth
place athlete's rank is"x"
).
Return an array answer
of size n
where answer[i]
is the rank of the ith
athlete.
Example 1:
Input: score = [5,4,3,2,1]
Output: ["Gold Medal","Silver Medal","Bronze Medal","4","5"]
Explanation: The placements are [1st, 2nd, 3rd, 4th, 5th].
Example 2:
Input: score = [10,3,8,9,4]
Output: ["Gold Medal","5","Bronze Medal","Silver Medal","4"]
Explanation: The placements are [1st, 5th, 3rd, 2nd, 4th].
Constraints:
n == score.length
1 <= n <= 104
0 <= score[i] <= 106
- All the values in
score
are unique.
<내 코드>
class Solution:
def findRelativeRanks(self, score: List[int]) -> List[str]:
tuple_list = []
# 1. 메달별 tuple 정렬
for i in range(len(score)):
tuple_list.append((i, score[i]))
tuple_list.sort(key = lambda x : x[1], reverse = True)
# 2. 크기만큼 미리 정렬
output = [0 for i in range(len(score))]
# 3. tupe 방식에 따라 재정렬
for i in range(len(score)):
medal = ""
if i == 0:
medal = "Gold Medal"
elif i == 1:
medal = "Silver Medal"
elif i == 2:
medal = "Bronze Medal"
else:
medal = str(i + 1)
output[tuple_list[i][0]] = medal
return output
- 이전에는 heap 방식으로 풀었다면, 이번에는 일반적인 정렬을 이용함
- 마지막에 넣어주는 방식에서 헷갈렸음
<모범사례>
class Solution:
def findRelativeRanks(self, score: List[int]) -> List[str]:
# 점수를 내림차순으로 정렬하여 순위를 매깁니다.
sorted_scores = sorted(score, reverse=True)
# 순위에 따른 메달 이름을 리스트로 저장합니다.
medals = ["Gold Medal", "Silver Medal", "Bronze Medal"]
# 점수와 순위를 매핑하는 딕셔너리를 생성합니다.
rank_dict = {}
for idx, s in enumerate(sorted_scores):
if idx < 3:
rank_dict[s] = medals[idx]
else:
rank_dict[s] = str(idx + 1)
# 원래 점수 리스트를 순회하며 결과를 생성합니다.
return [rank_dict[s] for s in score]
- 딕셔너리에 넣어주고 순회하면서 정리된것을 곧바로 빼주는 방식도 있음
- heap 을 쓸때에는 tuple 이 바람직하지만, 일반적인 정렬방식에서는 hash를 이용하는것이 보다 효율적임
'문제풀이 > 일일연습문제' 카테고리의 다른 글
[Sort]99클럽 코테 스터디 30일차 TIL + 백준/Bronze/1524. 세준세비 (1) | 2024.11.27 |
---|---|
[Sort]99클럽 코테 스터디 29일차 TIL + 2327-largest-number-after-digit-swaps-by-parity (0) | 2024.11.26 |
[Sort]99클럽 코테 스터디 27일차 TIL + 백준/Bronze/11557. Yangjojang of The Year (0) | 2024.11.24 |
[Sort]99클럽 코테 스터디 26일차 TIL + 백준/Silver/11004. K번째 수 (0) | 2024.11.23 |
[Priority Queue]25일차 TIL + 프로그래머스/2/42626. 더 맵게 (0) | 2024.11.22 |