[코딩테스트 입문]Day23-2
등수 매기기
문제 설명
영어 점수와 수학 점수의 평균 점수를 기준으로 학생들의 등수를 매기려고 합니다. 영어 점수와 수학 점수를 담은 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함수는 배열에서 값의 위치를 찾아주는 함수이며, 중복된 값이 존재할 경우 가장 최소의 위치를 리턴하는 성질을 사용했습니다.
함수나 문제를 잘 이용하신 것 같습니다.
댓글남기기