문제
대학생 새내기들의 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=require('fs').readFileSync('/dev/stdin').toString().split('\n');
const c=Number(input[0]);
for(let i=1;i<=c;i++){
let sum=0;
let avg=0;
let count=0;
let percents=0;
let students = input[i].split(' ')[0];
let score = input[i].split(' ')
for(let j=1;j<=students;j++){
sum += +score[j];
}
for(let o=1;o<=students;o++){
avg=sum/students;
if(avg<score[o]){
count++;
}
percents=count/students*100;
}
console.log(percents.toFixed(3)+'%');
}
아우터루프에서 각 값을받을 변수들을 선언+초기화해주었다.
그 다음 각 점수총합을 구한뒤 그 값을 받아 평균을 구하고 비교후 count++를 했다.
❌ 처음에는 let o=1을 사용한 for문을 j를 사용한for문에 같이
for(let j=1;j<=+students;j++){
sum += +score[j];
avg = sum/Number(students);
if(avg< +score[j]){
count++;
}
percents = count/Number(students)*100;
}
console.log(percents.toFixed(3) + '%');
}
////////////////////
❌output
100.000%
71.429%
66.667%
100.000%
88.889%
이런식으로 적었는데 이러면 j =1 일때 sum값은 50인상태에서 students로 나누니 10이되고
그값과 비교한다. 그 다음 j=2일때 sum은 이전50+50해서 100을 students로 나누니 20이되고
그값과 비교하게된다. 그래서 답이 ❌output 과 같이 나왔다.
그래서 동급 for문을 하나 더 적어줘 sum을 구하는 for문과 avg, count를 구하는 for문 따로 적어줬다.
✅ 다른분의 풀이
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 + "%");
}
-출처
https://www.acmicpc.net/problem/4344
'Algorithm > Baekjoon(Node.js)' 카테고리의 다른 글
[JavaSrcipt] Baekjoon - 4673 : 셀프 넘버 (함수) (0) | 2021.09.06 |
---|---|
[JavaSrcipt] reduce (0) | 2021.09.05 |
[JavaSrcipt] Baekjoon - 8958 : OX퀴즈 (0) | 2021.09.04 |
[JavaSrcipt] Baekjoon - 1546 : 평균 (0) | 2021.09.04 |
[JavaSrcipt] Baekjoon - 2577 : 숫자의 개수(set중복제거) (0) | 2021.09.03 |