[프로그래머스(파이썬/Python)] 복서 정렬하기(위클리 챌린지 6주차)
kindof
·2021. 9. 10. 16:22
https://programmers.co.kr/learn/courses/30/lessons/85002
문제에서 요구한 4가지 기준값을 정확히 구하고 해당 기준에 따라 정렬을 수행하면 되는 문제입니다.
특히 이 문제에서는 주어진 weights 배열과 head2head배열 내 원소의 문자열 길이가 동일했기 때문에 인덱싱을 쉽게 할 수 있다는 이점이 있었습니다.
다만, 많은 기업의 코딩테스트 문제들과 마찬가지로 테스트케이스가 모두 통과해도 채점 케이스가 틀리는 함정(?)이 이 문제에도 존재했는데 바로 "승률과 승리를 한 횟수는 다르다는 것"입니다.
사실, 함정이 아니라 문제를 똑바로 이해했는지에 대한 실력이겠지만 이런 부분을 세세하게 체크하는 습관이 중요한 것 같습니다.
[풀이]
from collections import defaultdict
def solution(weights, head2head):
info = defaultdict(list)
length = len(weights)
for i in range(length):
# 자신의 몸무게
myWeight = weights[i]
fight = head2head[i]
wins, overWeightWins, totalGames = 0, 0, 0
for j in range(length):
# 상대방의 몸무게
yourWeight = weights[j]
if i == j or fight[j] == "N": continue
if fight[j] == "W":
wins += 1
if myWeight < yourWeight:
overWeightWins += 1
totalGames += 1
info[i+1].append(wins/totalGames) if totalGames > 0 else info[i+1].append(0)
info[i+1].append(overWeightWins)
info[i+1].append(myWeight)
info[i+1].append(i+1)
sortedList = sorted(info.values(), key = lambda x : (-x[0], -x[1], -x[2], x[3]))
answer = [sortedList[idx][3] for idx in range(length)]
return answer
'Algorithm' 카테고리의 다른 글
[백준(Python/Java)] 2206_벽 부수고 이동하기(BFS) (0) | 2021.09.14 |
---|---|
[프로그래머스(파이썬/Python)] 숫자 문자열과 영단어(2021 카카오 인턴십) (0) | 2021.09.10 |
[프로그래머스(파이썬/Python)] 길 찾기 게임(2019 카카오 블라인드) (0) | 2021.09.07 |
[프로그래머스(파이썬/Python)] 거리두기 확인하기(2021 카카오 개발자 인턴십) (0) | 2021.09.06 |
[프로그래머스(파이썬/Python)] 후보키(2019 카카오 블라인드) (0) | 2021.09.06 |