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문을 세 번이나 사용했다...
통과는 했기 때문에 기능상의 문제는 없겠지만 메서드를 적극활용했다면 이렇게 코드가 길어질 필요가 없었을 것 같기도