복서 선수들의 몸무게 weights와, 복서 선수들의 전적을 나타내는 head2head가 매개변수로 주어집니다. 복서 선수들의 번호를 다음과 같은 순서로 정렬한 후 return 하도록 solution 함수를 완성해주세요.
제한사항
weights의 길이는 2 이상 1,000 이하입니다.
head2head의 길이는 weights의 길이와 같습니다.
입출력 예
입출력 예 설명
입출력 예 #1
입출력 예 #2
입출력 예 #3
function solution(weights, head2head) { var answer = []; const data = weights.map((n, idx) => { const obj = {}; obj['num'] = idx + 1; // 선수 번호 obj['weight'] = n; // 선수 몸무게 const total = head2head[idx]; // 각 선수 경기 전적 let winCount = 0; // 이긴 횟수 let winOverWeight = 0; // 자기보다 무거운 복서 이긴 횟수 let fightCount = 0; // 총 경기 횟수 for(let i = 0; i < total.length; i++) { if(total[i] === 'W') { winCount++; fightCount++; if(weights[i] > n) { winOverWeight++; } } else if(total[i] === 'L') { fightCount++; } } // 승률 obj['winRate'] = fightCount ? winCount / fightCount : 0; // 자기보다 무거운 복서 이긴 횟수 obj['winOverWeight'] = winOverWeight; return obj; }); data.sort((a, b) => { // 1. 승률 비교 if(a.winRate !== b.winRate) { return b.winRate - a.winRate; } // 2. 자기보다 무거운 복서 이긴 횟수 비교 if(a.winOverWeight !== b.winOverWeight) { return b.winOverWeight - a.winOverWeight; } // 3. 몸무게 비교 return b.weight - a.weight; }) return data.map(obj => obj.num); }
비교해야되는 조건이 승률, 자기보다 무거운 복서를 이긴 횟수, 자기 몸무게 이렇게 3가지가 있다.
우선 각 선수마다 저 3가지를 데이터로 객체를 만든다.
그리고 조건에 맞게
sort()
를 하는데 우선 순위에 따라 정렬한다.
- 승률
- 자기보다 무거운 복서를 이긴 횟수
- 자기 몸무게
1번 조건부터 비교해서 같으면 2번 조건, 2번 조건도 같으면 3번조건을 비교해서 정렬시키고 선수의 번호만 뽑아서 배열로
return
하면 된다.