캐또's coding

4344 - 평균은 넘겠지 - node.js 본문

기초 공부/백준 문제 풀이

4344 - 평균은 넘겠지 - node.js

JS_K_coding 2022. 8. 19. 11:01

문제

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

입력

첫째 줄에는 테스트 케이스의 개수 C가 주어진다.

둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.

출력

각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.

예제 입력 1 복사

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

예제 출력 1 복사

40.000%
57.143%
33.333%
66.667%
55.556%

출처

Contest > Waterloo's local Programming Contests > 28 September, 2002 D번

알고리즘 분류


첫 번째 줄의 입력으로는 전체 반복할 횟수가 주어진다.

각 테스트 케이스 줄의 첫 번째 값으로는 계산할 숫자들(점수들)의 갯수가 주어진다. 계산할 숫자들의 평균을 구한 뒤, 다시 계산할 숫자들 중에서 평균보다 많은 것이 몇개인지 계산한다. 마지막으로 테스트 케이스 줄의 갯수와 비교해서 비율을 구한다.

const input = require("fs").readFileSync("input.text").toString().trim().split("\n");
const times = Number(input[0]);
for (let i = 1; i < times + 1; i++) {
  let arr = input[i].trim().split(" ").map(Number);
  let sum = 0;
  let aver = 0;
  let count = 0;
  for (let i = 1; i < arr[0] + 1; i++) {
    sum += arr[i];
    aver = sum / arr[0];
  }
  for (let i = 1; i < arr[0] + 1; i++) {
    if (arr[i] > aver) {
      count++;
    }
  }
  console.log(`${((count / arr[0]) * 100).toFixed(3)}%`);
}

어쨌든 처음 정답으로 나온 결과다. 다른 문법이나 기능을 찾아보기 전에 우선 생각한 것이 그대로 가능한지 작성해보았다. for 안에서 for를 두 개 만들었고 다시 if를 넣었다. 전체 반복하는 안에서 각 줄은 0번 값을 다시 반복값으로 잡고, 안에 있는 숫자들을 모두 더한 뒤 반복값으로 나눠서 평균을 구하게 한다. 다음 반복문에서 다시 똑같은 숫자들을 대상으로 반복문을 돌면서 방금 구한 평균보다 큰 값이 있으면 count에 +1을 해줬다. 최종 값으로 나온 count를 반복값으로 나눈뒤 100을 곱하고 소수점의 특정 자리수까지 나오게 하는 toFixed를 써서 세번째 자리까지 나오게 했다. 출력에는 %까지 나와야 하기 때문에 백틱을 이용해서 출력을 작성했다.

'기초 공부 > 백준 문제 풀이' 카테고리의 다른 글

1065 - 한수 - node.js  (0) 2022.08.20
4673 - 셀프 넘버 - node.js  (0) 2022.08.19
8958 - OX퀴즈 - node.js  (0) 2022.08.18
1546 - 평균 - node.js (40번째)  (0) 2022.08.17
3052 - 나머지 - node.js  (0) 2022.08.17
Comments