문제의 조건에 따라 정렬을 할 때 1,2,3은 큰 값이 먼저오고, 4는 작은 값이 먼저온다. 내 코드의 경우, 1,2,3에 음의 부호를 붙여서 정렬했다. 주의해야할 점은 승률을 계산할 때, 소수를 버리거나 반올림하면 안되고, 분모가 0이되는 것도 고려해야한다.(3번째 입출력 참조) 이 부분만 주의해서 풀면된다.
기준에 맞는 정렬을 구현할 때, 정렬을 하나하나 구현할 필요없다. arr=[[-1번승률, -1번이 보다 무거운 복서를 이긴 횟수, -1번 무게, 1번], [-2번승률, -2번이 보다 무거운 복서를 이긴 횟수, -2번 무게, 2번]...]
식으로 만들고 arr.sort()
하면 된다. 파이썬은 2차원 리스트를 정렬할 때, 각 행의 1번째 원소 값을 먼저 비교하고, 그 값이 같은 행들이 존재하는 경우 그 다음 2번째 원소 값을 갖고 비교하고 2번째 원소 값도 같으면 그 다음으로 가는 식으로 진행해서 정렬한다.
arr = []
def make_std(weights, head2head):
global arr
n = len(weights)
for i in range(n):
rate = 0
win = 0
lose = 0
heavy_win = 0
for j in range(n):
if i == j: continue
if head2head[i][j] == 'L': lose += 1
elif head2head[i][j] == 'W':
win += 1
if weights[i] < weights[j]: heavy_win += 1
rate = win * 100 / (win + lose) if win + lose != 0 else 0
arr.append([-rate, -heavy_win, -weights[i], (i+1)])
def solution(weights, head2head):
global arr
make_std(weights, head2head)
arr.sort()
answer = [x[-1] for x in arr]
return answer