99클럽 코테 스터디 9일차 TIL [Relative Ranks]

여지은·2024년 8월 1일
0

Python Cording Test

목록 보기
10/14
post-thumbnail

✏️ 문제

선수들의 점수가 정수 배열 형식으로 주어지면 선수들의 순위를 반환하는 코드를 작성하라.

선수들은 점수에 따라 순위가 매겨지며, 1등 선수는 가장 높은 점수를 가지고, 2등 선수는 두 번째로 높은 점수를 가진다.
1등 선수의 순위는 "Gold Medal"
2등 선수의 순위는 "Silver Medal"
3등 선수의 순위는 "Bronze Medal"
4등부터 n등 까지의 선수들은 순위 번호를 그대로 사용한다.(예:4등 선수의 순위는 "4")

🧩 풀이

def findRelativeRanks(score) :
    
    # 주어진 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도 한 번 더 이해하는 과정을 진행했다.

# list Comprehension
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
profile
항상 why?를 고민하는 사람

0개의 댓글