sort를 이용한 값 정렬 후 키 순서찾기

LEE JI YOUNG·2022년 4월 14일
0

TOY & 코테

목록 보기
3/3
  • sort를 이용한 값 정렬 후 키 순서찾기 : 배열 형태로 만들어서 값으로 정렬하고 키를 순서대로 읽어주기.
    [키, 값]
// [[1, 9], [2, 7], [3, 8]]
result.sort((a,b) => b[1] - a[1]);

프로그래머스 - Lv1 - 2019 KAKAO BLIND RECRUITMENT 실패율

// 내 풀이
function solution(N, stages) {
//     let gameArr = []
//     for(let i = 1; i < N+1; i++){
        
//     }
    let arr = stages.slice(0).sort((a,b) => a-b);
    let countArr = new Array(N+1).fill(0);
    for(let i = 0; i < arr.length; i++){
        countArr[arr[i] - 1] = countArr[arr[i] - 1] + 1;
    }
  // console.log(countArr)
    let sumArr = new Array(N+1).fill(0);
    let sumTotal = countArr.reduce((acc, val, idx) => {
        sumArr[idx] = acc;
        return acc + val;
    },0);
  // console.log(sumArr)
    let failPercentArr =  new Array(N).fill(0);
    for(let i = 0; i < N; i++){
        failPercentArr[i] =  countArr[i] / (sumTotal - sumArr[i] ? sumTotal - sumArr[i] : 1);
    }
     // console.log(failPercentArr)
    var answer = [];
    // while(failPercentArr.reduce((acc,cur)=> acc+cur) !== -N ){
    //     let bigNum = Math.max(...failPercentArr);
    //     let idx = failPercentArr.indexOf(bigNum);
    //     answer.push(idx+1);
    //     failPercentArr[idx] = -1;
    // }
        // maxNum = failPercentArr 가장 큰 수 찾기 
        // failPercentArr에서 큰 수 index 찾기
        // answer.push(index+1)
        // failPercentArr[index] = -1
    
    let sortArr = failPercentArr.slice(0).sort((a,b) => b-a);
    sortArr = [... new Set(sortArr)]
    // console.log(sortArr, failPercentArr)
    for(let i = 0; i < sortArr.length; i++){
        for(let j = 0; j < failPercentArr.length; j++){
            if(sortArr[i] === failPercentArr[j]) answer.push(j + 1)
        }
    }
    // sortArr = failPercentArr 큰 순서대로 정렬
    // for(sortArr, i){ for(failPercentArr, j){if(sortArr[i] === failPercentArr[j]){answer.push(j + 1)}} } 
    return answer;
}

solution(9, [2, 1, 2, 6, 2, 4, 3, 3])
// 깔끔한 풀이
function solution(N, stages) {
    let result = [];
    for(let i=1; i<=N; i++){
        let reach = stages.filter((x) => x >= i).length;
        let curr = stages.filter((x) => x === i).length;
        result.push([i, curr/reach]);
    }
    result.sort((a,b) => b[1] - a[1]);
    return result.map((x) => x[0]);
}
profile
프론트엔드 개발자

0개의 댓글