🔗 1. 문제 URL
https://school.programmers.co.kr/learn/courses/30/lessons/120882
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
📝 2. 문제 요구사항 정리
영어 점수와 수학 점수가 담긴 2차원 배열 score가 주어졌을 때, 각 학생의 평균 점수를 기준으로 등수를 매긴 결과를 반환하는 문제입니다.
- 입력: 각 학생의 영어 점수와 수학 점수가 [영어, 수학] 형태로 주어집니다.
- 처리: 학생별 평균 점수를 구한 뒤, 높은 평균 점수부터 등수를 매깁니다.
- 반환값: 원래 학생 순서에 맞춰 각 학생의 등수를 담은 배열을 반환합니다.
💡 3. 핵심 개념
✔ 1) 학생별 평균 점수 구하기
score의 각 원소에는 영어 점수와 수학 점수가 들어 있으므로, 두 점수를 더한 뒤 2로 나누어 평균 점수를 구합니다. 이렇게 구한 평균은 이후 등수를 매기는 기준이 됩니다.
✔ 2) 평균 점수를 내림차순으로 정렬하기
등수는 높은 점수부터 1등이 되므로, 평균 점수 리스트를 내림차순으로 정렬한 별도 리스트를 만듭니다. 원본 평균 리스트는 학생의 기존 순서를 유지해야 하므로 따로 보관합니다.
✔ 3) index()로 등수 찾기
정렬된 평균 리스트에서 현재 평균 점수가 처음 등장하는 위치를 찾고, 인덱스에 1을 더하면 등수가 됩니다. 같은 평균 점수가 여러 명에게 있으면 index()가 첫 번째 위치를 반환하므로 공동 등수 처리도 자연스럽게 됩니다.
✅ 4. 정답 Python 코드
def solution(score):
avg_list = []
# 각 학생의 평균 점수를 구해서 리스트에 저장
for s in score:
eng = s[0]
math = s[1]
avg = (eng + math) / 2
avg_list.append(avg)
# 등수를 매기기 위해 내림차순 정렬된 새 리스트 생성
sorted_avg = sorted(avg_list, reverse=True)
answer = []
# 원본 평균 리스트를 돌며 등수 매기기
for avg in avg_list:
rank = sorted_avg.index(avg) + 1
answer.append(rank)
return answer
💬 5. 풀이하면서 느낀 점
처음에는 학생별 평균을 구한 뒤 직접 등수를 비교해야 하나 생각했는데, 풀이를 정리하다 보니 평균 리스트를 내림차순으로 정렬해 두면 각 평균의 위치만으로 등수를 구할 수 있다는 점이 핵심이었습니다.
그래서 원본 순서를 유지하는 avg_list와 등수 기준이 되는 sorted_avg를 따로 만들고, sorted_avg.index(avg) + 1로 각 학생의 등수를 계산하는 방식으로 풀었습니다. 같은 평균 점수가 있는 경우에도 index()가 첫 번째 위치를 반환하기 때문에 공동 등수를 자연스럽게 처리할 수 있었습니다.
또한, 같은 흐름을 더 간결하게 표현하고 싶다면 평균 리스트를 리스트 컴프리헨션으로 만들고, 반환값도 리스트 컴프리헨션으로 구성할 수 있습니다. 예를 들어 변수명을 맞춰 avg = [(eng + math) / 2 for eng, math in score]처럼 평균을 만든 뒤, 정렬된 리스트에서 각 평균의 위치를 찾는 방식으로 줄여볼 수 있다는 점도 함께 생각해볼 수 있었습니다.
궁금하신 점이나 포스팅에 대한 피드백이 있다면 댓글로 편하게 남겨주세요.
도움이 되셨다면 공감이나 댓글 한 줄 남겨주시면 포스팅을 이어가는 데 큰 힘이 됩니다. 😊
'코딩테스트 > 알고리즘' 카테고리의 다른 글
| [프로그래머스 LV.1] 완주하지 못한 선수 — Python 정답 & 해설 (0) | 2026.06.22 |
|---|---|
| [프로그래머스 LV.0] 문자열 밀기 — Python 정답 & 해설 (0) | 2026.06.19 |
| [프로그래머스 LV.2] 괄호 회전하기 — Python 정답 & 해설 (0) | 2026.06.16 |
| [프로그래머스 LV.0] 유한소수 판별하기 — Python 정답 & 해설 (1) | 2026.06.13 |
| [프로그래머스 LV.0] 배열 만들기 2 — Python 정답 & 해설 (0) | 2026.06.11 |