복서 정렬하기
복서 선수들의 몸무게 weights와, 복서 선수들의 전적을 나타내는 head2head가 매개변수로 주어집니다. 복서 선수들의 번호를 다음과 같은 순서로 정렬한 후 return 하도록 solution 함수를 완성해주세요.
weights[i]
는 i+1번 복서의 몸무게(kg)를 의미합니다.head2head[i]
는 i+1번 복서의 전적을 의미하며, head2head[i][j]
는 i+1번 복서와 j+1번 복서의 매치 결과를 의미합니다.
head2head[i][i]
는 항상 'N'입니다. 자기 자신과 싸울 수는 없기 때문입니다.head2head[i][j]
= 'W' 이면, head2head[j][i]
= 'L'입니다.head2head[i][j]
= 'L' 이면, head2head[j][i]
= 'W'입니다.head2head[i][j]
= 'N' 이면, head2head[j][i]
= 'N'입니다.weights | head2head | result |
---|---|---|
[50,82,75,120] |
["NLWL","WNLL","LWNW","WWLN"] |
[3,4,1,2] |
[145,92,86] |
["NLW","WNL","LWN"] |
[2,3,1] |
[60,70,60] |
["NNN","NNN","NNN"] |
[2,1,3] |
입출력 예 #1
선수 번호 | vs 1번 | vs 2번 | vs 3번 | vs 4번 | 승률 | 자기보다 무거운 복서를 이긴 횟수 | 몸무게 |
---|---|---|---|---|---|---|---|
1번 | - | 패배 | 승리 | 패배 | 33.33% | 1회 | 50kg |
2번 | 승리 | - | 패배 | 패배 | 33.33% | 0회 | 82kg |
3번 | 패배 | 승리 | - | 승리 | 66.66% | 2회 | 75kg |
4번 | 승리 | 승리 | 패배 | - | 66.66% | 0회 | 120kg |
[3,4,1,2]
를 return 합니다.입출력 예 #2
선수 번호 | vs 1번 | vs 2번 | vs 3번 | 승률 | 자기보다 무거운 복서를 이긴 횟수 | 몸무게 |
---|---|---|---|---|---|---|
1번 | - | 패배 | 승리 | 50% | 0회 | 145kg |
2번 | 승리 | - | 패배 | 50% | 1회 | 92kg |
3번 | 패배 | 승리 | - | 50% | 1회 | 86kg |
[2,3,1]
을 return 합니다.입출력 예 #3
선수 번호 | vs 1번 | vs 2번 | vs 3번 | 승률 | 자기보다 무거운 복서를 이긴 횟수 | 몸무게 |
---|---|---|---|---|---|---|
1번 | - | - | - | 0% (무전적) | 0회 | 60kg |
2번 | - | - | - | 0% (무전적) | 0회 | 70kg |
3번 | - | - | - | 0% (무전적) | 0회 | 60kg |
[2,1,3]
을 return 합니다.def solution(weights, head2head):
answer = []
boxer_info_list = []
for i in range(len(weights)):
cnt = 0 # 대결 횟수
win_cnt = 0 # 이긴 횟수
heavy_cnt = 0 # 자기보다 무거운 복서를 이긴 횟수
win_rate = 0.0 # 승률
# print("%i번째 복서 몸무게: %i" % (i+1, weights[i]))
for j in range(len(weights)):
if i != j:
# print("%i 대결상대 복서 몸무게: %i 승패: %s" % (j+1, weights[j], head2head[i][j]))
if head2head[i][j] != "N":
cnt += 1
if head2head[i][j] == "W":
win_cnt += 1
if weights[i] < weights[j]:
heavy_cnt += 1
win_rate = (win_cnt / cnt) * 100 if cnt else 0
# print("%i번째 복서의 승률: %r 자기보다 무거운 복서를 이긴 횟수: %i \n" % (i+1, win_rate, heavy_cnt))
boxer_info_list.append((i+1, weights[i], win_rate, heavy_cnt))
boxer_info_list = sorted(boxer_info_list, key = lambda x: (x[2], x[3], x[1], -x[0]), reverse=True)
# print(boxer_info_list)
for num in range(len(boxer_info_list)):
answer.append(boxer_info_list[num][0])
return answer
처음 문제를 볼때 길고, 조건이 까다로워서 어려운 문제라고 착각을 했다.
문제를 차분하게 읽고 다시 접근해보니 의외로 간단한 문제였고, 수월하게 해결할 수 있었다.
sorted(key = lambda) 를 알고 있다면 쉽게 답을 구할수 있을 것이다.