[백준 | Javascript] 4344

박기영·2022년 5월 17일
0

백준

목록 보기
41/127

1차원 배열 7단계
4344번. 평균은 넘겠지

문제

대학생 새내기들의 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%

solution

const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().split('\n');

const iter = Number(input[0]);

for(let i = 1; i <= iter; i++){
  let inputData = input[i].split(' ').map(Number);
  let studentNum = inputData.shift();
  let avg = 0;
  let count = 0;
  
  let sum = inputData.reduce(function add(sum, curr) {
		return sum + curr;
	}, 0);

  avg = sum / studentNum;

  for(let j = 0; j < studentNum; j++){    	
    if(inputData[j] > avg){
      count++;   
    }  
  }
  
  const ratio = ((count/studentNum)*100).toFixed(3);
  console.log(`${ratio}%`);
}

해설

맨 위에 있는 수는 테스트 케이스의 숫자이고, 그 다음 줄부터 살펴보자.
첫 번째 숫자는 학생 수이다. 따라서 평균 점수를 구하는데 합해져서는 안되므로, shift()를 통해 배열에서 떼어내준다. studentNum에는 학생 수만 들어가 있고, inputData에는 학생 수를 제외한 점수들만이 남게된다.
reduce()를 통해서 점수들의 합을 구하고, 이를 학생 수로 나눠서 평균 점수를 구했다.
평균 점수와 각각의 점수를 비교하여 평균 점수를 넘을 시 count가 증가하게 해서, 평균 점수를 넘는 학생 수를 구한다.
마지막에 (평균을 넘는 학생 수 / 학생 수)*100을 하면 평균을 넘는 학생의 비율을 구할 수 있다.
그런데, 소수점 셋 째 자리까지만 출력하라고 했으므로, toFixed()를 사용해 소수점 아랫자리 수를 제한해줬다.

profile
나를 믿는 사람들을, 실망시키지 않도록

0개의 댓글