알고리즘/문제풀이
[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. 아이디어 정리
- 복서 승률 계산, 이긴 횟수 세기, 자신의 무게, 자신의 번호를 리스트에 넣어준다.
- 해당 리스트를 정렬을 진행한다.
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. 결론
- 정렬 문제
반응형