반응형
저번 4주차 때와 마찬가지로 딕셔너리 소팅 문제로 접근해 풀었다.
python dictionary sort 정리 (sort by key & value)
각 복서 마다 속성들
- 몇번 이겼는지 ⇒ win_count
- 자기보다 무거운 사람과 싸워서 이겼는지 ⇒ weight_count
- 몇번 선수인지 ⇒ index
- 자기 몸무게는 몇인지 ⇒ weights[index]
등을 dictionary로 저장하고
해당 속성별로 정렬하면 되는 문제였다.
나는 하나 헤맸던 점이 (승리 횟수 / 경기 횟수) 에서 경기 횟수를 자기 자신과의 경기만 제외했었다.
그랬더니 계속 틀림...
문제에도 명시 되었다 싶이 "N"으로 명시된 경기가 존재하고 이건 경기 횟수에서 제외해야 한다.
def solution(weights, head2head):
answer = []
boxer_score = list()
for index, plays in enumerate(head2head):
win_count = 0
none_count = 0
weight_count = 0
for jndex, result in enumerate(plays): # index번째 복서의 경기 기록을 반복
if result == "W": # 이기면 count+=1
win_count += 1
if weights[index] < weights[jndex]: #몸무게 초과일 경우 weight_count+=1
weight_count += 1
elif result == "N": #안한 경기는 경기 횟수에서 제외하기 위해
none_count += 1
temp_score = dict() # index번째 복서의 정보를 dictionary 로 저장
temp_score["number"] = index+1
if len(plays)-none_count == 0:
temp_score["score"] = 0
else:
temp_score["score"] = win_count / (len(plays)-none_count)
temp_score['weight_count'] = weight_count
temp_score['weight'] = weights[index]
boxer_score.append(temp_score)
sorted_list = sorted(boxer_score,
key=lambda x : (-x['score'], -x['weight_count'], -x['weight'], x['number']))
for item in sorted_list:
answer.append(item['number'])
return answer
이거는 문제
https://programmers.co.kr/learn/courses/30/lessons/85002
반응형
'algorithm > programmers' 카테고리의 다른 글
예상 대진표 [프로그래머스] (0) | 2021.09.23 |
---|---|
입실 퇴실 [프로그래머스] (0) | 2021.09.15 |
H-index [프로그래머스] (0) | 2021.07.06 |
소수 찾기 [프로그래머스] (0) | 2021.07.05 |
오픈채팅방 [프로그래머스] (0) | 2021.07.02 |
댓글