본문 바로가기
Coding Test/JavaScript

[Javascript] (프로그래머스 level 0) 등수 매기기

by Chaedie 2022. 10. 20.
728x90

[Javascript] (프로그래머스 level 0) 등수 매기기

💡 구글에 Javascript 풀이가 많이 없거나, 배운 점이 있으면 포스팅합니다.

내 풀이

function solution(score) {
    const scoreOrder = score.map((x, i) => [x[0] + x[1], i])
    scoreOrder.sort((a, b) => b[0] - a[0])

    const result = [];
    for (let i = 0; i < score.length; i++) {
        let totalScore = scoreOrder[i][0]
        let index = scoreOrder[i][1]

        result[index] = i + 1

        if (i > 0) {
            let prevTotalScore = scoreOrder[i - 1][0]
            let prevIndex = scoreOrder[i - 1][1]

            if (prevTotalScore === totalScore) {
                result[index] = result[prevIndex]
            }
        } 
    }

    return result
}
  • 과목이 2개로 고정되어 있어 평균 내지 않고, 그냥 합계 점수로 계산했습니다.
    • map으로 [[합계, 인덱스], [합계, 인덱스] … ] 의 형태로 만듬
    • sort()를 이용해서 순서대로 줄세워 줌
  • for문을 이용해서 줄 대로 result 배열에 넣어 주고
    • if 문을 이용해서 이전 합계와 현재 합계가 동일한 애들은 이전 합계의 등수와 맞춰주었습니다.
  • 굉장히 풀이가 장황해서 다른 사람들은 어떻게 풀었을지 정말 궁금하네요.

다른 사람 풀이 참고한 풀이

function solution(score) {
    const totals = score.map((x) => x[0] + x[1])
    const sortedTotals = totals.slice().sort((a, b) => b - a)

    return totals.map((x) => sortedTotals.indexOf(x) + 1)
}
  • 🤣 엄~청 간단하게 풀었네요!
    • 우선 sort()는 기존 배열을 sort해버리니까 slice()로 새로운 배열을 하나 더 만들고 그걸 sort()했네요.
    • indexOf를 사용해서 값과 같은 index를 구하고 +1로 등수를 맞춰 주었네요!
    • indexOf를 사용하면 첫번째 위치를 반환하니까 동점자가 나와도 동일한 등수가 나옵니다

배운 점, 느낀 점

  • 역시 답을 냈다고 전부가 아니라, 더 좋은 답을 찾는 연습이 필요합니다~!

댓글