TODAY TIL
파이썬으로 점수 순위 매기기 - 쉬운 풀이 가이드
안녕하세요, 이번 블로그 포스트에서는 파이썬을 이용해 점수 배열을 받아 선수들의 순위를 매기는 문제를 해결해보려고 합니다. 점수에 따라 메달을 부여하고 순위를 매기는 알고리즘 문제를 쉽게 이해할 수 있도록 차근차근 설명드릴게요. 이 포스트를 통해 여러분이 코드 작성 과정을 이해하고, 직접 문제를 풀어볼 수 있도록 돕겠습니다!
문제 설명
우리는 각 선수의 점수가 담긴 배열을 받습니다. 이 배열에는 각 선수의 점수가 고유하게 담겨 있으며, 높은 점수가 높은 순위를 의미합니다. 각 선수는 다음과 같은 순위에 따라 메달 또는 순위 번호를 부여받습니다.
- 1등: "Gold Medal"
- 2등: "Silver Medal"
- 3등: "Bronze Medal"
- 4등 이후: 해당 순위 숫자
예를 들어, 입력 배열이 [10, 3, 8, 9, 4]이라면 결과는 ['Gold Medal', '5', 'Bronze Medal', 'Silver Medal', '4']가 되어야 합니다.
해결 방법
이 문제를 해결하기 위해 다음과 같은 단계를 거칠 것입니다.
- 점수 배열과 인덱스 묶기: 각 점수와 인덱스를 묶어 리스트로 만듭니다. 이렇게 하면 점수를 정렬한 후에도 각 점수가 원래 어디에 있었는지 알 수 있습니다.
- 점수 정렬하기: 점수들을 높은 순서대로 정렬합니다. 정렬된 순서에서 1등, 2등, 3등을 각각 메달로 처리하고 나머지 순위를 숫자로 기록합니다.
- 결과 배열 생성: 원래 배열에 맞는 순위를 기록한 결과 배열을 반환합니다.
코드 구현
이제 파이썬 코드로 이 문제를 해결하는 방법을 알아보겠습니다. 코드가 이해하기 쉽게 클래스 형태로 작성되어 있습니다.
class Solution:
def findRelativeRanks(self, score):
# 점수 배열과 각 인덱스를 묶어 (점수, 인덱스) 형태로 리스트 생성 후 내림차순 정렬
sorted_score = sorted(enumerate(score), key=lambda x: x[1], reverse=True)
# 결과 배열 초기화
ranks = [""] * len(score)
# 순위에 따라 메달 혹은 순위 번호를 할당
for i, (idx, value) in enumerate(sorted_score):
if i == 0:
ranks[idx] = "Gold Medal"
elif i == 1:
ranks[idx] = "Silver Medal"
elif i == 2:
ranks[idx] = "Bronze Medal"
else:
ranks[idx] = str(i + 1)
return ranks
# 예제 입력 테스트
solution = Solution()
score1 = [5, 4, 3, 2, 1]
print(solution.findRelativeRanks(score1)) # 출력: ["Gold Medal", "Silver Medal", "Bronze Medal", "4", "5"]
score2 = [10, 3, 8, 9, 4]
print(solution.findRelativeRanks(score2)) # 출력: ["Gold Medal", "5", "Bronze Medal", "Silver Medal", "4"]
코드 설명
- 점수 정렬하기: enumerate(score)를 사용해 점수와 인덱스를 함께 묶은 후, 점수를 기준으로 내림차순 정렬했습니다. 이렇게 하면 각 점수가 원래 어느 위치에 있었는지 알 수 있게 됩니다.
- 결과 배열 생성: 정렬된 점수에 따라 순위를 매기고, 그에 맞는 메달 혹은 순위 숫자를 원래 인덱스 위치에 기록합니다.
- 메달 할당: 1, 2, 3등에 해당하는 선수에게 각각 "Gold Medal", "Silver Medal", "Bronze Medal"을 부여하고, 나머지는 순위 숫자를 할당합니다.
예제 테스트
- 입력: [5, 4, 3, 2, 1]
- 출력: ["Gold Medal", "Silver Medal", "Bronze Medal", "4", "5"]
- 입력: [10, 3, 8, 9, 4]
- 출력: ["Gold Medal", "5", "Bronze Medal", "Silver Medal", "4"]
마무리
이렇게 해서 점수 배열을 받아 선수들의 순위를 메달 및 숫자로 표현하는 방법을 알아보았습니다. 간단한 정렬과 반복문을 이용해 문제를 해결할 수 있었죠. 이 문제는 파이썬의 정렬 기능과 인덱스 활용을 배울 수 있는 좋은 예제입니다.
여러분도 비슷한 문제를 풀 때 이런 방식으로 접근해 보세요! 질문이나 궁금한 점이 있으면 언제든지 댓글로 남겨주세요.
'python' 카테고리의 다른 글
99클럽 코테 스터디_4기 29일차 TIL (1) | 2024.11.26 |
---|---|
99클럽 코테 스터디_4기 28일차 TIL (0) | 2024.11.25 |
99클럽 코테 스터디_4기 26일차 TIL (0) | 2024.11.24 |
99클럽 코테 스터디_4기 25일차 TIL (0) | 2024.11.23 |
99클럽 코테 스터디_4기 24일차 TIL (0) | 2024.11.21 |