ALGORITHM

[백준/ node.js] 배열 - 4344번 평균은 넘겠지

연듀 2021. 7. 4. 14:25

https://www.acmicpc.net/problem/4344

 

4344번: 평균은 넘겠지

대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.

www.acmicpc.net

 

문제

대학생 새내기들의 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를 사용해 나머지 점수들의 합을 더해 평균을 구한다.