-풀이
def solution(weights, head2head):
info = []
# w = 복서 몸무게들의 길이
w = len(weights)
# p = w길이 만큼 0~(w-1)
for p in range(w):
high = [i for i in range(w) if weights[i]>weights[p]] # 더 무거운 사람 인덱스
over = len([info for info in high if head2head[p][info]=="W"]) # 더 무거운 사람 이긴 수
#w=n이면 0이다. 아니면 else문..
rate = 0 if not (w-head2head[p].count("N")) else head2head[p].count("W")/(w-head2head[p].count("N"))
info.append((p, weights[p], rate, over)) # 번호, 자기무게, 승률, 무거운복서 이긴 횟수
info = sorted(info, key=lambda x: (x[2], x[3], x[1], -x[0]), reverse=True)
return [num[0]+1 for num in info]
-풀이 설명
이 문제는 6주차 위클리 문제인데, zip함수를 써볼까 생각을 하다가 잘 안풀려서 오랜 고민끝에 풀이를 보게 되었다. high변수에 더 무거운 사람의 인덱스를 담고, over에 더 무거운 사람 이긴 수를 담고 rate에 N 관련된 경우의 수를 나타내어 주고 info리스트에 번호,자기무게,승률,무거운복서 이긴 횟수를 담고 람다 함수를 이용해 정렬해준다.
생각보다 람다 함수가 많이 쓰이는 것 같아 람다함수에 대해 더 이해하고 공부를 해야 할 것 같다.
'알고리즘' 카테고리의 다른 글
[프로그래머스][level 1]2016년(날짜 함수) (0) | 2021.10.08 |
---|---|
[프로그래머스][level 1]최소 직사각형 (0) | 2021.10.08 |
[프로그래머스][level 1]상호평가 (0) | 2021.10.08 |
[프로그래머스][level 1]부족한 금액 계산하기 (0) | 2021.10.08 |
[프로그래머스][level 1]비밀지도(2018 카카오 블라인드 기출) (0) | 2021.10.08 |