[프로그래머스] 복서 정렬하기

박종범·2021년 9월 14일
0

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

코드

def solution(weights, head2head):
    players = []
    
    for index, (weight, log) in enumerate(zip(weights, head2head)): 
        players.append({
            'number': index + 1,
            'weight': weight,
            'win_rate': log.count("W") / max(1, len(log) - log.count("N")) * 100,
            'win_heavier': sum(result == "W" and weight < weights[i] for i, result in enumerate(log))
        })
                
    players.sort(key=lambda x: [-x['win_rate'], -x['win_heavier'], -x['weight']])
    
    return [player['number'] for player in players]

sum

Iterable의 합을 반환하는 함수
이중 for문 돌면서 직접 조건에 해당하는 것을 1씩 증가하며 count 했는데..ㅎㅎ
굳이 그럴 필요가없었다,,! (이중for문 코드는 길어지니 생략)

sort

#전
players.sort(key=lambda x: x['weight'], reverse=True)
players.sort(key=lambda x: x['win_heavier'], reverse=True)
players.sort(key=lambda x: x['win_rate'], reverse=True)

# 후
players.sort(key=lambda x: [-x['win_rate'], -x['win_heavier'], -x['weight']])

sort를 여러번 할 필요 없이 key를 위와 같이 설정해주면 원하는대로 정렬이 된다..

후기

그동안 자바로 알고리즘 문제 풀었는데, 파이썬으로 알고리즘 문제풀어보니 너무 편하다.. enumerate, zip 너무 편하고, 자바는 딕셔너리 형태의 자료구조 만드려면 맵을 이용해야 했었는데 파이썬에서는 훨씬 편해졌다.

0개의 댓글