본문 바로가기
알고리즘

프로그래머스 위클리 체인지 6주차 - 복서 정렬하기

by Lihano 2021. 10. 8.
반응형

풀이 언어 : PYTHON

def solution(weights, head2head):
    answer = []
    newInforms = []
    
    for i, log in enumerate(head2head) :
        # 전체 이긴 횟수
        win = 0
        # 전체 진 횟수
        lose = 0
        # 나보다 무거운 선수를 이긴 횟수
        heavy_win = 0
        
        for j, l in enumerate(log) :
            if l == "W" :
                if weights[i] < weights[j] :
                    heavy_win += 1
                    win += 1
                else :
                    win += 1
            elif l == "L" :
                lose += 1
        
        # 승률 구하기
        if win+lose > 0 :
            rate = win/(win+lose)*100
        else :
            rate = 0
            
        newInforms.append([i+1, weights[i], rate, heavy_win])
    
    # 승률 -> 나보다 무거운 선수 이긴 횟수 -> 몸무게 -> 번호 순 정렬
    newInforms.sort(key=lambda x:(-x[2], -x[3], -x[1], x[0]))
    
    for inform in newInforms :
        answer.append(inform[0])
        
    return answer

 

6주차니까 난이도가 올라갔으려니 했는데 그것도 아니었다.

이번 문제도 귀찮을 뿐 어렵지는 않은 문제다.

그냥 복서들의 승률, 자신보다 무거운 선수를 이긴 횟수, 몸무게를 구한후에

그걸 문제가 요구하는 순으로 정렬하면 그만이다.

key=lambda를 사용하여 정렬의 기준을 복수개 설정할 수 있는 방법만 안다면 정말 쉬운 문제다

 

링크

코딩테스트 연습 - 6주차_복서 정렬하기 | 프로그래머스 (programmers.co.kr)

반응형

댓글