[프로그래머스 LV.0] 등수 매기기 — Python 정답 & 해설

2026. 6. 22. 02:27·코딩테스트/알고리즘

🔗 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
'코딩테스트/알고리즘' 카테고리의 다른 글
  • [프로그래머스 LV.1] 완주하지 못한 선수 — Python 정답 & 해설
  • [프로그래머스 LV.0] 문자열 밀기 — Python 정답 & 해설
  • [프로그래머스 LV.2] 괄호 회전하기 — Python 정답 & 해설
  • [프로그래머스 LV.0] 유한소수 판별하기 — Python 정답 & 해설
작지만 꾸준한 성장으로
작지만 꾸준한 성장으로
contact
  • 작지만 꾸준한 성장으로
    파랑새
    작지만 꾸준한 성장으로
  • 전체
    오늘
    어제
    • 분류 전체보기 (26)
      • IT (3)
      • 코딩테스트 (23)
        • 알고리즘 (12)
        • MYSQL (11)
      • 패션 (0)
      • 독후감 (0)
      • TIL (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    프로그래머스 lv.2
    wide format
    데이터 리모델링
    공공데이터 전처리
    프로그래머스 lv.0
    SWEA
    코테
    mysql
    와이드 포맷 롱 포맷
    자바
    백준
    코딩테스트
    Pandas pivot
    Programmers
    sql 코딩테스트
    파이썬코테
    데이터 전처리 파이프라인
    CPU Bound
    데이터베이스
    프로그래머스 lv.1
    I/O Bound
    프로그래머스
    Pandas groupby agg
    파이썬
    python3
    모델 추론
    Python
    알고리즘
    Pandas melt
    long format
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
작지만 꾸준한 성장으로
[프로그래머스 LV.0] 등수 매기기 — Python 정답 & 해설
상단으로

티스토리툴바