https://programmers.co.kr/learn/courses/30/lessons/85002
복서들의 정보가 주어질 때, 이를 토대로 복서 정보가 담긴 배열을 정렬하는 문제이다.
즉, sort의 compare 함수를 정의하면 된다.
Javascript의 sort는 compare 함수에서 음수를 반환하면 1번 파라미터가 앞의 순서에 놓이도록 정렬된다.
winRate가 더 높은 요소를 앞에 배치하고 싶다면 compare 함수에서 1번 파라미터의 winRate가 2번 파라미터의 winRate 보다 클 때 음수를 반환 하면 된다.
이를 코드로 나타내면 다음과 같다.
foo.sort((a, b) => b.winRate - a.winRate);
정렬 조건은 승률이 같을 때, 무거운 상대를 이긴 횟수가 같을 때, 몸무게가 같을 때 체이닝된다.
이를 ||
연산자를 사용해서 좀 더 간단히 나타낼 수 있다.
a || b
라는 식에서 a가 거짓일 때만 b를 확인한다.
sort 함수에서 두 파라미터의 비교조건이 동등할 경우 0을 반환하기 때문에 다음과 같이 나타낼 수 있다.승률이 같음(= 0) || 무거운 상대를 이긴 횟수가 같음(= 0) || 몸무게가 같음(= 0)
function solution(weights, head2head) {
const answer = [];
for (let i = 0; i < head2head.length; i++) {
let len = head2head.length, win = 0, heavyWin = 0;
for (let j = 0; j < head2head[i].length; j++) {
if (head2head[i][j] === 'N') len--;
if (head2head[i][j] === 'W') {
win++;
if (weights[j] > weights[i]) heavyWin++;
}
}
answer.push({
winRate: isNaN(win / len) ? 0 : win / len,
heavyWin,
weight: weights[i],
idx: i,
});
}
answer.sort((a,b) =>
b.winRate - a.winRate ||
b.heavyWin - a.heavyWin ||
b.weight - a.weight ||
a.idx - b.idx)
const res = answer.map((a) => a.idx + 1);
return res;
}
'단단해지기 > Algorithm' 카테고리의 다른 글
[프로그래머스] 입실 퇴실 Javascript (0) | 2021.09.19 |
---|---|
[프로그래머스] 모음사전 Javascript (0) | 2021.09.18 |
[백준/BOJ 알고리즘] 17845 수강 과목 C++ (0) | 2021.09.12 |
[백준/BOJ 알고리즘] 10830 행렬 제곱 C++ (0) | 2021.09.12 |
[백준/BOJ 알고리즘] 16236 아기상어 C++ (0) | 2020.09.17 |