https://programmers.co.kr/learn/courses/30/lessons/42889
이번엔 함수 분리를 안했당ㅎㅎ 코딩테스트를 할 때 함수 모듈화하는 연습도 같이 하는데, 어디선가 모듈화를 하지 말라는 조건을 본 것 같아서, 아 코테에선 모듈화가 중요하지는 않나? 싶기도 하고..
실패율을 객체 형태로 저장해주어야 하나, 배열로 저장한 후 인덱스 기준으로 정렬을 해야하나 고민했는데 인덱스는 까다로울 것 같아서 객체로 저장했다.
function solution(N, stages) {
let stageRecord = {};
// 모든 스테이지를 돌면서
for (let i = 1; i <= N; i++) {
let curStage = i;
let arrivedButNotClearedPlayers = 0;
let clearedPlayers = 0;
// 스테이지에 도달했지만 클리어하지 못한 플레이어의 수와, 클리어한 플레이어 수를 구한다
stages.forEach((stage) => {
if (stage === curStage) arrivedButNotClearedPlayers++;
if (stage > curStage) clearedPlayers++;
});
// 실패율을 구한다
let failureRate = !arrivedButNotClearedPlayers
? 0
: arriveButNotClearedPlayers / clearedPlayers;
// stageRecore에 curStage를 키로 하여 실패율을 저장한다
stageRecord[curStage] = failureRate;
}
// stageRecore의 모든 키를 순회하면서 문자열로 바뀐 키들을 숫자로 변환해준 후 조건에 따라 정렬한다
return Object.keys(stageRecord)
.map(stage => +stage)
.sort((a, b) => {
if (stageRecord[a] > stageRecord[b]) return -1;
if (stageRecord[a] < stageRecord[b]) return 1;
if (stageRecord[a] === stageRecord[b]) {
return a - b;
}
});
}