Programmers

[프로그래머스][JS] 등수 매기기

winter17 2023. 7. 10. 11:57

https://school.programmers.co.kr/learn/courses/30/lessons/120882

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이 과정

// score = [[80, 70], [90, 50], [40, 70], [50, 80]]
function solution(score) {
    var avg = [];
    for (let i = 0; i < score.length; i++){
        const [a, b] = score[i]
        avg.push((a + b) / 2)
    }
    // 평균을 내서 avg 배열에 생성
    // console.log(avg) 	[ 75, 70, 55, 65 ]
    
    // 원본을 복사하여 정렬상태가 훼손되지 않도록
    let array = avg.slice()
    
    // avg배열을 오름차순으로 정렬 : 등수를 매기기위함
    const sorted = avg.sort((a, b) => a - b)
    // console.log(sorted) [ 55, 65, 70, 75 ] 
    
    // 배열의 수가 클수록 작은 수, 작을수록 큰 수가 되도록 객체 생성
    let obj = {}
    for (let i = 0; i < sorted.length; i++){
        obj[sorted[i]] = sorted.length - i
    }
    // 객체의 value가 등수를 말하는 것
    // console.log(obj)  { '55': 4, '65': 3, '70': 2, '75': 1 }
    // console.log(avg)	[ 55, 65, 70, 75 ] -> avg배열이 정렬되어있음 : 원본 훼손
    // console.log(array)  [ 75, 70, 55, 65 ] -> 원본 정렬을 훼손 x
    
    let result = []
    for (let i = 0; i < array.length; i++){
        result.push(obj[array[i]]) // 객체에서 각 요소에 맞는 value를 찾아 result에 push
    }
    // console.log(result) 	[ 1, 2, 4, 3 ]
    
    return result;
}

리뷰

다른 사람들 풀이 보니까 엄청 간결하게 풀었던데 나는 for문을 세 번이나 사용했다...

통과는 했기 때문에 기능상의 문제는 없겠지만 메서드를 적극활용했다면 이렇게 코드가 길어질 필요가 없었을 것 같기도