Link
문제
대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다.
당신은 그들에게 슬픈 진실을 알려줘야 한다.
입력 > 첫째 줄에는 테스트 케이스의 개수 C가 주어진다.
둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.
출력 > 각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.
| 예제 입력
5
5 50 50 70 80 100
7 100 95 90 80 70 60 50
3 70 90 80
3 70 90 81
9 100 99 98 97 96 95 94 93 91
| 예제 출력
40.000%
57.143%
33.333%
66.667%
55.556%
제출
const input = (
process.platform === "linux"
? require("fs").readFileSync("/dev/stdin").toString()
: `5
5 50 50 70 80 100
7 100 95 90 80 70 60 50
3 70 90 80
3 70 90 81
9 100 99 98 97 96 95 94 93 91`
).split("\n");
const num = Number(input[0]);
for (let i = 1; i <= num; i++) {
let [student, ...score] = input[i].trim().split(" ");
let avg = score.reduce((sum, v) => (sum += v * 1), 0) / student;
let count = 0;
for (let j = 0; j < student; j++) {
if (avg < score[j]) {
count++;
}
}
console.log(`${((count / student) * 100).toFixed(3)}%`);
}
풀이과정
for (let j = 0; j < student; j++) {
sum += score[j]
}
if (avg < score[j]) {
count++;
}
🔼 처음엔 두 번째 for문에서 sum을 구하고, for문 밖에서 평균을 구해서 score[j]랑 비교하려 했는데
그렇게 되면 j를 사용할 수 없기 때문에 score[j]와 평균을 비교할 수 없었다.
따라서 reduce로 평균을 구했더니 해결되었다.
개념
Array.prototype.reduce()
- 배열의 각 요소에 대해 주어진 reducer 함수를 실행한 결과값을 반환한다.
- 매개변수는 다음과 같다.
- 콜백함수
- 누산기
- 현재 처리할 값
- 처리할 값의 인덱스, 초기값을 제공할 경우 0부터 그렇지 않을 경우 1부터 시작한다. (optional)
- 처리할 값의 원본 배열 (optional)
- 초기값 (optional)
- 지정하지 않으면 배열의 첫 번째 요소를 초기값으로 사용한다.
- 콜백함수
Comment
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준] 1065: 한수 (javascript) (0) | 2022.06.27 |
---|---|
[백준] 4673: 셀프 넘버 (javascript) (0) | 2022.06.27 |
[백준] 8958: OX퀴즈 (0) | 2022.06.17 |
[백준] 1546: 평균 (0) | 2022.06.17 |
[백준] 3052: 나머지(javascript) (0) | 2022.06.15 |