출처
백준 온라인 저지
4344번: 평균은 넘겠지
대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.
www.acmicpc.net
문제
첫째 줄에는 테스트 케이스의 개수 C가 주어진다.
둘째 줄부터 각 테스트 케이스마다 학생의 수 N이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다.
점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.
각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.
풀이
첫째줄을 제외한(테스트 케이스 개수) 나머지 줄을 기준으로 for 문을 돌려줍니다. 이때 각각 케이스에서 split 메서드를 사용하여 공백을 기준으로 나눠줍니다.
그리고 shift 메서드를 사용하여 해당 배열의 맨 앞 값을 빼줍니다. (학생의 수)
평균을 구하기 위한 해당 케이스 점수의 총합을 구해주고 학생의 수만큼 나눠 평균을 구해줍니다.
학생의 수를 기준으로 for 문을 돌려 해당 케이스의 값이 평균보다 높을 때마다 카운트 값을 1씩 늘려주고, (카운트(평균을 넘는 수) / 학생의 수) * 100)으로 평균을 넘는 학생의 비율을 구해줍니다.
toFixed 메서드를 사용하여 소수점 3자리까지 표시해준 후 해당 값에 '%'를 붙여준 뒤 출력해 줍니다.
코드
let input = require('fs').readFileSync('/dev/stdin').toString().split('\n');
let num = input[0] * 1;
for (let i = 1; i <= num; i++) {
let score = input[i].split(' ');
let num2 = score.shift() * 1;
let count = 0;
let avg = score.reduce((acc, v) => acc += v * 1, 0);
avg /= num2;
for (let j = 0; j < num2; j++) {
if (score[j] > avg) {
count++;
}
}
let result = ((count / num2) * 100).toFixed(3);
console.log(result + "%");
}