본문 바로가기
IT/CodingTest

[programmers] '등수 매기기' 문제 해설 및 정답코드

by Echinacea 2025. 3. 27.
반응형



 

 

 

문제 출처

https://school.programmers.co.kr/learn/courses/30/lessons/120882

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

 

 

✅ 문제 설명

어플에서 학생들의 영어와 수학 점수가 주어진 드림 score에서, 각 학생의 평균점수를 계산하고 그를 기준으로 등수를 매기는 문제입니다.


 

 

🔹 해결 방식

  1. 각 학생의 [영어, 수학] 점수를 보고, 평균 계산
  2. 평균점수를 높은 순서로 밀어 등수 매기
  3. 원래 순서에 따라 각 학생의 등수 복원

 

 

📈 예시

 

예시 1

score = [[80, 70], [90, 50], [40, 70], [50, 80]]
  • 평균: [75, 70, 55, 65]
  • 등수: 75(1등), 70(2등), 65(3등), 55(4등)
  • 원래 순서로 등수: [1, 2, 4, 3]

 

예시 2

score = [[80, 70], [70, 80], [30, 50], [90, 100], [100, 90], [100, 100], [10, 30]]
  • 평균: [75, 75, 40, 95, 95, 100, 20]
  • 등수: 100(1등), 95(2등), 75(4등), 40(6등), 20(7등)
  • 결과: [4, 4, 6, 2, 2, 1, 7]

 

 

💻 코드 구현

def solution(score):
    # 각 학생의 평균 계산
    avg = [(s[0] + s[1]) / 2 for s in score]

    # 높은 순서로 정렬
    sorted_avg = sorted(avg, reverse=True)

    # 순서를 기준으로 등수 계산
    ranks = [sorted_avg.index(a) + 1 for a in avg]

    return ranks

 

 

✅ 테스트

print(solution([[80, 70], [90, 50], [40, 70], [50, 80]]))
# 결과: [1, 2, 4, 3]

print(solution([[80, 70], [70, 80], [30, 50], [90, 100], [100, 90], [100, 100], [10, 30]]))
# 결과: [4, 4, 6, 2, 2, 1, 7]

 

반응형

댓글