[프로그래머스] 위클리 챌린지 6주차(Python)

알고리즘 저장소·2021년 9월 6일
0

프로그래머스

목록 보기
24/29
post-custom-banner

1. 아이디어

문제의 조건에 따라 정렬을 할 때 1,2,3은 큰 값이 먼저오고, 4는 작은 값이 먼저온다. 내 코드의 경우, 1,2,3에 음의 부호를 붙여서 정렬했다. 주의해야할 점은 승률을 계산할 때, 소수를 버리거나 반올림하면 안되고, 분모가 0이되는 것도 고려해야한다.(3번째 입출력 참조) 이 부분만 주의해서 풀면된다.

기준에 맞는 정렬을 구현할 때, 정렬을 하나하나 구현할 필요없다. arr=[[-1번승률, -1번이 보다 무거운 복서를 이긴 횟수, -1번 무게, 1번], [-2번승률, -2번이 보다 무거운 복서를 이긴 횟수, -2번 무게, 2번]...]식으로 만들고 arr.sort()하면 된다. 파이썬은 2차원 리스트를 정렬할 때, 각 행의 1번째 원소 값을 먼저 비교하고, 그 값이 같은 행들이 존재하는 경우 그 다음 2번째 원소 값을 갖고 비교하고 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
post-custom-banner

0개의 댓글