내용으로 건너뛰기
테페리넷
사용자 도구
등록
로그인
사이트 도구
검색
도구
문서 보기
Fold/unfold all
역링크
미디어 관리자
사이트맵
등록
로그인
>
미디어 관리자
사이트맵
현재 위치:
테페리넷
»
Problem Solving
»
문제
»
프로그래머스
»
복서 정렬하기
ps:problems:programmers:85002
이 문서는 읽기 전용입니다. 원본을 볼 수는 있지만 바꿀 수는 없습니다. 문제가 있다고 생각하면 관리자에게 문의하세요.
====== 복서 정렬하기 ====== ===== 풀이 ===== * 그냥 시키는대로, 주어진 정렬 기준에 해당되는 값을 계산해서 정렬하면 된다 * 한 선수의 승률을 계산하기 위해서는, n명의 선수와의 전적을 봐야 하므로 O(n). 따라서 n명의 선수 모두에 대해서 승률을 각각 구하려면 O(n^2). {자신보다 무거운 복서를 이긴 횟수} 를 모든 선수에 대해서 구하는 것도 마찬가지로 O(n^2). * 정렬 기준을 다 계산하는 데에 O(n^2). 정렬하는 것은 O(nlogn). 그러므로 전체 복잡도는 O(n^2) ===== 코드 ===== <dkpr py> """Solution code for "Programmers 85002. 복서 정렬하기". - Problem link: https://programmers.co.kr/learn/courses/30/lessons/85002 - Solution link: http://www.teferi.net/ps/problems/programmers/85002 """ def solution(weights, head2head): def compare_key(num): my_weight, my_h2h = weights[num - 1], head2head[num - 1] win_count, loss_count = my_h2h.count('W'), my_h2h.count('L') win_rate = (0 if win_count == 0 else win_count / (win_count + loss_count)) win_against_heavier_count = sum(1 for w, h in zip(weights, my_h2h) if h == 'W' and w > my_weight) return (-win_rate, -win_against_heavier_count, -my_weight, num) return sorted(range(1, len(weights) + 1), key=compare_key) </dkpr> {{tag>프로그래머스 ps:problems:programmers:Level_1}}
ps/problems/programmers/85002.txt
· 마지막으로 수정됨: 2021/09/13 14:37 저자
teferi
문서 도구
문서 보기
역링크
Fold/unfold all
맨 위로