알고리즘/문제풀이

[Python] Programmers 6주차_복서 정렬하기

정찡이 2021. 9. 18. 14:35
728x90

1. 문제 링크

https://programmers.co.kr/learn/courses/30/lessons/85002

 

코딩테스트 연습 - 6주차_복서 정렬하기

복서 선수들의 몸무게 weights와, 복서 선수들의 전적을 나타내는 head2head가 매개변수로 주어집니다. 복서 선수들의 번호를 다음과 같은 순서로 정렬한 후 return 하도록 solution 함수를 완성해주세요

programmers.co.kr


2. 문제 요약

정렬문제


3. 아이디어 정리

  1. 복서 승률 계산, 이긴 횟수 세기, 자신의 무게, 자신의 번호를 리스트에 넣어준다.
  2. 해당 리스트를 정렬을 진행한다.

4. 문제 풀이

4-1. 내 풀이

def solution(weights, head2head):
    answer = list()
    win_rate = list()
    # 복서 승률 계산, 이긴횟수 세기(나보다 무거운 사람), 자신의 무게, 자신의 번호 넣기 
    for i, (w, head) in enumerate(zip(weights, head2head)):
        win_count = 0  # 무거운 사람을 이긴 사람 횟수
        win = 0
        lose = 0
        for j, h in enumerate(head):
            if h == "W":
                win += 1
                if w < weights[j]:
                    win_count += 1
            if h == "L": lose += 1
        if win == 0 or (win + lose) == 0:
            rate = 0
        else:
            rate = win / (win + lose)
        win_rate.append((rate, win_count, w, i + 1))

    # 승률 높은 사람, 이긴 횟수가 많은 사람, 자신의 무게가 무거운 사람, 자기 번호가 낮은 사람 기준 정렬 
    win_rate.sort(key=lambda x: (-x[0], -x[1], -x[2], x[3]))
    return [num for w, w1, w3, num in win_rate]

 


5. 결론

  • 정렬 문제
반응형