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를 사용하면 첫번째 위치를 반환하니까 동점자가 나와도 동일한 등수가 나옵니다
배운 점, 느낀 점
- 역시 답을 냈다고 전부가 아니라, 더 좋은 답을 찾는 연습이 필요합니다~!
'Coding Test > JavaScript' 카테고리의 다른 글
[Javascript] (재귀) 이진수 만들기 (1) | 2022.11.08 |
---|---|
[Javascript] (프로그래머스 level 0) 연속된 수의 합 (0) | 2022.10.28 |
[Javascript] (프로그래머스 level 0) 특이한 정렬 (0) | 2022.10.24 |
[Javascript] (프로그래머스 level 0) 로그인 성공? (0) | 2022.10.20 |
[Javascript] (프로그래머스 level 0) 치킨 쿠폰 (0) | 2022.10.20 |
[Javascript] (구름 먼데이 챌린지) 1주차 1번 문제 (0) | 2022.10.14 |
[Javascript] (프로그래머스 level 0) 외계행성의 나이 (0) | 2022.10.14 |
[Javascript] (프로그래머스 level 0) 중복된 문자 제거 (0) | 2022.10.12 |
댓글