반응형
비교할 데이터를 객체 배열로 map한 후 sort를 통해 문제의 조건에 맞게 정렬하였습니다.
const winningPoint = { N: 0, L: 0, W: 1 };
const getWinningRate = head =>
Array.from(head).reduce((acc, winning) => (acc += winningPoint[winning]), 0) /
(head.length - head.match(/N/g).length || 1);
const solution = (weights, head2head) =>
weights
.map((weight, idx) => ({
idx,
weight,
head2: head2head[idx],
beatCount: weights.reduce(
(acc, weight2, idx2) =>
weight < weight2 && head2head[idx].charAt(idx2) === "W"
? (acc = acc + 1)
: acc,
0
)
}))
.sort((a, b) => {
const [winningRateA, winningRateB] = [
getWinningRate(a.head2),
getWinningRate(b.head2)
];
if (winningRateA !== winningRateB) return winningRateB - winningRateA;
if (a.beatCount !== b.beatCount) return b.beatCount - a.beatCount;
if (a.weight !== b.weight) return b.weight - a.weight;
return a.idx - b.idx;
})
.map(({ idx }) => idx + 1);
반응형
'Algorithm' 카테고리의 다른 글
프로그래머스 코딩테스트 연습 Level1 - 실패율 [ javascript ] (0) | 2021.09.11 |
---|---|
프로그래머스 위클리 챌린지 4주차 - 직업군 추천하기 [ javascript ] (0) | 2021.09.10 |
소인수분해 알고리즘 [ javascript ] (0) | 2021.09.08 |
소수 판별 알고리즘 [ javascript ] (0) | 2021.09.07 |
프로그래머스 코딩테스트 연습 Level1 - 3진법 뒤집기 [ javascript ] (0) | 2021.08.13 |