상상쓰

[프로그래머스] 6주차_복서 정렬하기 본문

Coding Test

[프로그래머스] 6주차_복서 정렬하기

상상쓰 2021. 9. 6. 16:15

https://programmers.co.kr/learn/courses/30/lessons/85002

 

코딩테스트 연습 - 6주차

복서 선수들의 몸무게 weights와, 복서 선수들의 전적을 나타내는 head2head가 매개변수로 주어집니다. 복서 선수들의 번호를 다음과 같은 순서로 정렬한 후 return 하도록 solution 함수를 완성해주세요

programmers.co.kr

 

한 행을 수행하면서 정렬할 조건의 값들을 모두 구한다.

[승률, 자기보다 무거운 복서를 이긴 횟수, 몸무게, 선수 번호]

 

위 배열의 순서대로 비교하고 승률, 자기보다 무거운 복서를 이긴 횟수, 몸무게는 내림차순으로 선수 번호는 오름차순으로 정렬해서 선수 번호를 출력해야 하므로 내림차순으로 정렬하는 조건의 값에 -1을 곱해준 다음 sorted() 를 취한 후 차례대로 선수 번호를 출력하면 된다.

 

def solution(weights, head2head):
    answer = []
    N = len(weights)
    dic = dict(zip(range(N), weights))
    I = 0
    
    for w, h in zip(weights, head2head):
        W, T, S = 0, 0, 0
        
        for i in range(N):
            if h[i] != 'N':
                T += 1
                
                if h[i] == 'W':
                    W += 1
                    
                    if w < dic[i]:
                        S += 1
        I += 1
        answer.append([-W/T if T != 0 else 0, -S, -w, I])

    answer = list(map(lambda x : x[3], sorted(answer)))
            
    return answer

print(solution([50, 82, 75, 120], ['NLWL', 'WNLL', 'LWNW', 'WWLN'])) # [3, 4, 1, 2]
Comments