문제 소개
이번 챌린지에서는 전달받은 세 개의 점수에 대한 평균을 구하고, 그 평균값에 해당하는 학점 문자를 반환하는 함수를 작성해야 합니다.
학점 기준표는 다음과 같습니다.
- A: 90점 이상 ~ 100점 이하
- B: 80점 이상 ~ 90점 미만
- C: 70점 이상 ~ 80점 미만
- D: 60점 이상 ~ 70점 미만
- F: 60점 미만
예제 코드
아래 코드는 나머지 매개변수(rest parameter)를 사용해 여러 개의 점수를 한 번에 받아 평균을 계산한 후, 조건문으로 학점을 판별합니다.
const findGrade = (...scores) => {
const { length } = scores;
const sum = scores.reduce((acc, val) => acc + val);
const score = sum / length;
if (score >= 90 && score <= 100) {
return 'A';
} else if (score >= 80) {
return 'B';
} else if (score >= 70) {
return 'C';
} else if (score >= 60) {
return 'D';
} else {
return 'F';
}
}
console.log(findGrade(5, 40, 93));
console.log(findGrade(30, 85, 96));
console.log(findGrade(92, 70, 40));코드 동작 방식
- 나머지 매개변수(
...scores)를 통해 함수에 전달된 모든 점수를 하나의 배열로 수집합니다. reduce()메서드로 점수의 합계를 구한 뒤, 배열의 길이로 나누어 평균 점수를 계산합니다.if ~ else if조건문으로 평균 점수가 속하는 구간을 순차적으로 확인하고, 대응하는 학점 문자를 반환합니다.
실행 결과
콘솔 출력 결과는 다음과 같습니다.
F
C
D
결과 해석
findGrade(5, 40, 93)→ (5 + 40 + 93) ÷ 3 = 46점, 따라서 FfindGrade(30, 85, 96)→ (30 + 85 + 96) ÷ 3 ≈ 70.33점, 따라서 CfindGrade(92, 70, 40)→ (92 + 70 + 40) ÷ 3 ≈ 67.33점, 따라서 D
이처럼 각 점수의 합을 개수로 나눈 평균값이 어느 구간에 속하는지에 따라 최종 학점이 결정됩니다. 나머지 매개변수 덕분에 점수가 세 개보다 많거나 적게 전달되더라도 동일한 로직으로 확장해 사용할 수 있다는 점도 눈여겨볼 만합니다.