문제
[영어점수, 수학점수] 평균점수를 기준으로 학생들의 등수를 매겨라
나의 풀이
function solution(score) {
const n = score.length;
const averages = new Array(n).fill(1);
var arr = [];
for(let [num1, num2] of score) {
arr.push((num1 + num2) / 2)
}
console.log(arr);
for(let i = 0; i < n; i ++) {
for (let j = 0; j < n; j++) {
if (i !== j && arr[i] < arr[j]) {
averages[i]++;
}
}
}
return averages
}
- n : 학생수
- averages : 학생수와 동일한 길이로 생성되며 모든 학생의 순위를 1로 초기화 한다
- arr : 평균을 저장할 배열
- for of를 사용하여 scrore 배열을 반복해 두 과목 점수 num1, num2를 가져와 평균을 계산하고 arr 배열에 추가한다
- 중첩된 for 루프를 사용하여 학생들 간의 평균 점수를 비교하고 높은 점수를 가진 학생에게 순위를 부여한다
- 만약 학생 i의 평균점수 arr[i]와 arr[j] 평균점수 보다 작으면 averages[i]에 1증가
다른 풀이
1) map.. filter
function solution(score) {
return score.map((el) => {
return (
score.filter((v) => (v[0] + v[1]) / 2 > (el[0] + el[1]) / 2).length + 1
);
});
}
- scroe 배열의 각 학생에 대해 아래의 동작을 수행한다
- el는 현재 순회중인 학생
- filter를 사용하여 평균 점수를 비교하는 조건을 만족하는 학생들의 배열을 필터링한다 현재 학생 el 보다 평균 점수가 높은 학생 수를 계산 + 1
2) slice
function solution(score) {
let avg = score.map(v=>(v[0]+v[1])/2);
let sorted = avg.slice().sort((a,b)=>b-a);
return avg.map(v=>sorted.indexOf(v)+1);
}
- avg 배열은 학생들의 평균 점수 배열
- sorted 배열은 평균 점수를 복사한후 내림차순으로 정렬한 배열
- map 함수를 사용하여 sorted.indexOf(v) 평균점수 v가 sorted 배ㅕㅇㄹ에서 어느 위치게 있는지 찾아 v 순위를 계산한다
3) for of
function solution(score) {
const answer = [];
for (const [a, b] of score) {
const ab = (a + b) / 2;
let cnt = 1;
for (const [aa, bb] of score) {
const aabb = (aa + bb) / 2;
if (aabb > ab) cnt++;
}
answer.push(cnt);
}
return answer;
}
'기초다지기 > JS 코딩테스트' 카테고리의 다른 글
javascript 조건에 맞는 수 찾기 (0) | 2023.11.03 |
---|---|
javaScript 치킨 쿠폰 (0) | 2023.11.03 |
javascript 배열 조합 문제 (1) | 2023.11.02 |
javaScript 좌표 배열 경로 이동 (0) | 2023.11.01 |
javaScript 2차원 직사각형의 넓이 계산하기 (0) | 2023.11.01 |