✏️ 문제
선수들의 점수가 정수 배열 형식으로 주어지면 선수들의 순위를 반환하는 코드를 작성하라.
선수들은 점수에 따라 순위가 매겨지며, 1등 선수는 가장 높은 점수를 가지고, 2등 선수는 두 번째로 높은 점수를 가진다.
1등 선수의 순위는 "Gold Medal"
2등 선수의 순위는 "Silver Medal"
3등 선수의 순위는 "Bronze Medal"
4등부터 n등 까지의 선수들은 순위 번호를 그대로 사용한다.(예:4등 선수의 순위는 "4")
🧩 풀이
def findRelativeRanks(score) :
sorted_score = sorted([(s,i) for i,s in enumerate(score)],reverse=True)
result = [""]*len(score)
for rank, (s,i) in enumerate(sorted_score):
if rank == 0:
result[i] = "Gold Medal"
elif rank == 1 :
result[i] = 'Silver Medal'
elif rank == 2 :
result[i] = "Bronze Medal"
else :
result[i] = str(rank+1)
return result
❗️ 결과
💡회고
- 시도했던 부분
def solution(score):
score.sort(reverse=True)
score[0]="Gold Medal"
score[1]="Silver Medal"
score[2]="Bronze Medal"
return score
위 코드는 1위부터 3위까지만 Gold, Silver, Bronze 등급으로 나오고 4위 부터는 점수 그대로가 반환된다.
이 문제를 어떻게 하면 잘 풀 수 있을까 하여 힙도 알아봤지만 실패하였고,
결국 Chat GPT의 도움을 받았다.
- 새롭게 알게된 점
항상 list comprehension 부분을 잘 써야한다 생각만 하지만 막상 코드를 작성할 때는
잘 사용하지 않고 있었다.
Chat GPT의 답변을 하나씩 이해해보고자 list comprehension을 풀어서 적용해보기도 하고,
잘 사용하지 않았던 enumerate도 한 번 더 이해하는 과정을 진행했다.
sorted_score = sorted([(s,i) for i,s enumerate(score)],reverse=True)
sorted_score = []
for i,s in enumerate(score) :
sorted_score.append((s,i))
sorted_score.sort(reverse=True)
enumerate
- 리스트, 튜플, 문자열 등 반복 가능한 객체를 순회할 때, 각 요소의 인덱스와 그 요소 자체를 함께 제공
- 반복문에서 인덱스를 별도로 관리하지 않고도 간편하게 요소와 인덱스를 동시에 사용할 수 있도록 해줌
- enumerate는 반복 가능한 객체를 입력으로 받고 iterable(인덱스,값) 형태의 튜플을 반환함
- 기본적으로 인덱스는 0으로 시작하지만 start값을 지정하면 인덱스를 원하는 값에서 시작할 수 있음
my_list = ['apple','banana','cherry']
for i,v in enumerate(my_list,start=1):
print(i,v)
1 apple
2 banana
3 cherry
for i,v in enumerate(my_list,start=2):
print(i,v)
2 apple
3 banana
4 cherry