1 분 소요

등수 매기기

문제 설명

영어 점수와 수학 점수의 평균 점수를 기준으로 학생들의 등수를 매기려고 합니다. 영어 점수와 수학 점수를 담은 2차원 정수 배열 score가 주어질 때, 영어 점수와 수학 점수의 평균을 기준으로 매긴 등수를 담은 배열을 return하도록 solution 함수를 완성해주세요.


제한사항

  • 0 ≤ score[0], score[1] ≤ 100
  • 1 ≤ score의 길이 ≤ 10
  • score의 원소 길이는 2입니다.
  • score는 중복된 원소를 갖지 않습니다.

입출력 예

score result
[[80, 70], [90, 50], [40, 70], [50, 80]] [1, 2, 4, 3]
[[80, 70], [70, 80], [30, 50], [90, 100], [100, 90], [100, 100], [10, 30]] [4, 4, 6, 2, 2, 1, 7]

문제 풀이

def solution(score):
    slist = [(x + y)/2 for x, y in score]
    s = sorted(slist, reverse=True)
    val = {}
    for x, y in enumerate(s):
        if y not in val.keys():
            val[y] = x+1
    return [val[i] for i in slist]

값을 정렬하고 그 값의 등수를 매기고 또 값이 같을때는 같은 등수를 받기 때문에 중복을 허용하지 않는 set자료형의 성질을 이용해서 작성했습니다.

다른 풀이

def solution(score):
    a = sorted([sum(i) for i in score], reverse = True)
    return [a.index(sum(i))+1 for i in score]

평균을 구하는 것은 결국 모두 나누기 2를 하기 때문에 이를 생략하고 역순정렬하여 리스트를 생성하고 그 리스트의 인덱스를 출력하는 형식입니다.

index함수는 배열에서 값의 위치를 찾아주는 함수이며, 중복된 값이 존재할 경우 가장 최소의 위치를 리턴하는 성질을 사용했습니다.

함수나 문제를 잘 이용하신 것 같습니다.

업데이트:

댓글남기기