Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 실기
- 머신러닝
- oracle
- 카카오
- pandas
- 실습
- 알고리즘
- sklearn
- 파이썬
- level 1
- python3
- 프로그래머스
- Python
- Numpy
- 코딩테스트
- matplotlib
- Oracel
- SQL
- 빅데이터 분석 기사
- 오라클
- Kaggle
- 튜닝
- 빅분기
- R
- level 2
- seaborn
- 데이터 분석
Archives
- Today
- Total
라일락 꽃이 피는 날
[위클리 챌린지] 6주차_복서 정렬하기 본문
728x90
[문제]
복서 선수들의 몸무게 weights와, 복서 선수들의 전적을 나타내는 head2head가 매개변수로 주어집니다. 복서 선수들의 번호를 다음과 같은 순서로 정렬한 후 return 하도록 solution 함수를 완성해주세요.
- 전체 승률이 높은 복서의 번호가 앞쪽으로 갑니다. 아직 다른 복서랑 붙어본 적이 없는 복서의 승률은 0%로 취급합니다.
- 승률이 동일한 복서의 번호들 중에서는 자신보다 몸무게가 무거운 복서를 이긴 횟수가 많은 복서의 번호가 앞쪽으로 갑니다.
- 자신보다 무거운 복서를 이긴 횟수까지 동일한 복서의 번호들 중에서는 자기 몸무게가 무거운 복서의 번호가 앞쪽으로 갑니다.
- 자기 몸무게까지 동일한 복서의 번호들 중에서는 작은 번호가 앞쪽으로 갑니다.
[제한사항]
- weights의 길이는 2 이상 1,000 이하입니다.
- weights의 모든 값은 45 이상 150 이하의 정수입니다.
- weights[i] 는 i+1번 복서의 몸무게(kg)를 의미합니다.
- head2head의 길이는 weights의 길이와 같습니다.
- head2head의 모든 문자열은 길이가 weights의 길이와 동일하며, 'N', 'W', 'L'로 이루어진 문자열입니다.
- head2head[i] 는 i+1번 복서의 전적을 의미하며, head2head[i][j]는 i+1번 복서와 j+1번 복서의 매치 결과를 의미합니다.
- 'N' (None)은 두 복서가 아직 붙어본 적이 없음을 의미합니다.
- 'W' (Win)는 i+1번 복서가 j+1번 복서를 이겼음을 의미합니다.
- 'L' (Lose)는 i+1번 복사가 j+1번 복서에게 졌음을 의미합니다.
- 임의의 i에 대해서 head2head[i][i] 는 항상 'N'입니다. 자기 자신과 싸울 수는 없기 때문입니다.
- 임의의 i, j에 대해서 head2head[i][j] = 'W' 이면, head2head[j][i] = 'L'입니다.
- 임의의 i, j에 대해서 head2head[i][j] = 'L' 이면, head2head[j][i] = 'W'입니다.
- 임의의 i, j에 대해서 head2head[i][j] = 'N' 이면, head2head[j][i] = 'N'입니다.
[코드]
def solution(weights, head2head):
answer = []
tot_list = []
for i in range(len(weights)):
# 1. 전체 승률
win_cnt = head2head[i].count('W')
lose_cnt = head2head[i].count('L')
if win_cnt+lose_cnt == 0:
win_rate = 0
else:
win_rate = win_cnt / (win_cnt+lose_cnt) * 100
# 2. 자신보다 몸무게가 무거운 복서를 이긴 횟수
heavy_win = 0
for j in range(len(head2head)):
if head2head[i][j] == 'W':
if weights[i] < weights[j]:
heavy_win += 1
# 3. 몸무게
weight = weights[i]
# 4. 번호
number = i+1
boxer_list = [win_rate, heavy_win, weight, number]
tot_list.append(boxer_list)
tot_list = sorted(tot_list, key = lambda x : (x[0], x[1], x[2], -x[3]), reverse = True)
for boxer in tot_list:
answer.append(boxer[3])
return answer
728x90
'코딩테스트 > Python' 카테고리의 다른 글
[Level 1] 예산 (0) | 2021.09.24 |
---|---|
[Level 1] 두 개 뽑아서 더하기 (0) | 2021.09.24 |
[2018 KAKAO BLIND RECRUITMENT][1차] 비밀지도 (0) | 2021.09.18 |
[2018 KAKAO BLIND RECRUITMENT][1차] 다트 게임 (0) | 2021.09.18 |
[Level 1] 2016년 (0) | 2021.08.23 |