코드
def solution(score):
avg = [sum(i)/2 for i in score] # 평균
s_avg = sorted(avg, reverse=True) # 평균을 큰 값부터 내림차순 정렬
answer =[] # 등수
for i in avg:
answer.append(s_avg.index(i)+1) # index는 맨 앞에 위치한 요소의 인덱스 번호를 리턴
return answer
score = [[80, 70], [70, 80], [30, 50], [90, 100], [100, 90], [100, 100], [10, 30]] 이면 두 점수의 평균이 높은 순으로 등수를 매겨 [4, 4, 6, 2, 2, 1, 7]으로 나타내는 문제이다. 공동 등수가 있으면 공동으로 나타낸다.
평균을 구하는 과정은 어렵지 않다.
그다음으로 등수를 매길 때, 어떻게 순서대로 나타낼 수 있을지 그리고 공동 등수는 어떻게 똑같이 나타낼 수 있는지 고민하는 시간이 오래 걸렸다.
헷갈릴 때는 하나씩 직접 출력해 보는 것이 가장 시간을 단축할 수 있고 이해하기에도 쉽다고 생각한다.
avg와 s_avg를 출력해 보면 어떻게 등수를 나타내야 할지 감이 잡히게 된다.
s_avg의 인덱스번호+1을 등수로 볼 수 있다.
0번 인덱스에 위치하는 값이 가장 큰 값, 즉 1등이므로 0+1을 한 값이 등수가 되는 것이다.
인덱스는 index() 함수를 통해 구할 수 있다.
그렇다면, 95점과 같이 같은 값이 있으면 등수를 어떻게 나타낼까?
index() 함수는 같은 값이 리스트에 존재하면 앞 쪽에 위치한 인덱스를 리턴한다.
따라서, s_avg에서 95의 인덱스를 찾으면 1을 리턴한다.
결과값은 avg 리스트에 담긴 순서와 같아야 하므로 avg의 값을 하나씩 가져와 그 값이 s_avg에서 위치하는 인덱스를 찾으면 해당 값의 등수가 된다.
이 등수를 answer에 추가하면 avg 리스트과 같은 순서대로 등수를 구할 수 있다.
반응형