Coding Test/JavaScript
[Javascript] (프로그래머스 level 0) 등수 매기기
Chaedie
2022. 10. 20. 10:50
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를 사용하면 첫번째 위치를 반환하니까 동점자가 나와도 동일한 등수가 나옵니다
배운 점, 느낀 점
- 역시 답을 냈다고 전부가 아니라, 더 좋은 답을 찾는 연습이 필요합니다~!