https://www.acmicpc.net/problem/4344
문제
대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.
입력
첫째 줄에는 테스트 케이스의 개수 C가 주어진다.
둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.
출력
각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.
const input = require('fs').readFileSync('/dev/stdin').toString().split('\n');
const c = Number(input[0]);
for(let i=1; i<=c; i++){
let sum = 0;
let count = 0;
scores = input[i].split(' ').map(Number);
const n = scores[0];
for(let j=1; j<=n; j++){
sum += scores[j];
}
const avg = sum/n;
for(let k=1; k<=n; k++){
if(scores[k]>avg){
count++;
}
}
console.log(((count/n)*100).toFixed(3)+"%");
}
첫번째 줄을 테스트 케이스 개수로 받고
두번째 줄부터 공백을 기준으로 한 score배열을 만들어 준다.
학생의 수인 첫번째 원소 값을 제외한 나머지 값들의 총합을 for문으로 구해주고 또 다른 for문으로 평균을 넘는 학생의 수를 구한다.
toFixed를 사용해 평균을 넘는 학생의 비율을 소수점 셋째 자리까지 출력한다.
shift, rdeuce 사용한 방법
const input = require('fs').readFileSync('/dev/stdin').toString().split('\n');
const c = Number(input[0]);
for(let i=1; i<=c; i++){
let sum = 0;
let count = 0;
const scores = input[i].split(' ').map(Number);
const n = scores.shift();
sum = scores.reduce((acc, cur) => acc+=cur, 0);
const avg = sum/n;
for(let j=0; j<n; j++){
if(scores[j]>avg)
count++;
}
console.log((count/n*100).toFixed(3)+"%");
}
점수 배열의 첫번째 값을 학생의 수로 반환하고,
reduce를 사용해 나머지 점수들의 합을 더해 평균을 구한다.
'ALGORITHM' 카테고리의 다른 글
[Javascript] 프로그래머스- 정렬 / K번째 수 (0) | 2022.03.03 |
---|---|
[백준/ node.js] 함수 - 4673번 셀프 넘버 (0) | 2021.07.13 |
[백준/ node.js] 배열 - 8958번 OX퀴즈 (0) | 2021.07.03 |
백준 node.js로 여러 줄의 값 입력받을 때 주의해야 할 점 (0) | 2021.07.01 |
[백준/ node.js] 배열 - 3052번 나머지 (0) | 2021.06.30 |