복서 선수들의 몸무게 weights와, 복서 선수들의 전적을 나타내는 head2head가 매개변수로 주어집니다. 복서 선수들의 번호를 다음과 같은 순서로 정렬한 후 return 하도록 solution 함수를 완성해주세요.
function solution(weights, head2head) {
const players = weights.length;
weights = weights.map((e) => [e, [0, 0], 0]);
for (let i = 0; i < players; i++) {
for (let j = 0; j < players; j++) {
if (head2head[i][j] === "W") {
weights[i][1][0] += 1;
weights[i][1][1] += 1;
weights[j][1][1] += 1;
if (weights[i][0] < weights[j][0]) {
weights[i][2] += 1;
}
}
}
}
return weights
.map((e, idx) => [e[0], e[1][0] / e[1][1], e[2], idx + 1])
.sort((a, b) => b[0] - a[0])
.sort((a, b) => b[2] - a[2])
.sort((a, b) => b[1] - a[1])
.map((e) => e[3]);
}
weights 가 결국 선수가 있는거니까 weights의 인자를 0번째 인자로 가지는 2차원 배열을 만들어서 반복문을 돌렸다.
2차원배열에는 해당 선수의 무게, 승/패(승률), 자기보다 큰 체급을 이긴 횟수가 들어간다.
처음엔 그냥 승수만 셌었는데, 이게 생각해보니 누구는 한번만 싸워 이겨서 승률이 100퍼센트이고, 누구는 세번 싸워서 한번 졌으면 승률은 전자가 높지만 승수는 후자가 높게된다.
이 경우를 생각을 안해서 고민하다가 2차원배열의 1번째 인덱스를 단순 승수로 하는 것이 아니라 3차원 배열을 만들고 승수와 총 게임횟수를 넣어서 해결했다.
출처: 프로그래머스 코딩 테스트 연습,