업데이트:

🔍 문제


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

⚪ 입력


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

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

⚪ 출력


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

📝 정답 코드

//입력 받기
let input = require('fs').readFileSync('/dev/stdin').toString().split('\n');
let num = input[0] * 1;
const inputTestCase = [];

for(let i=1; i<=num; ++i){
  const arr = input[i].split(' ').map((item)=> +item);
  const newArr = []
  for(let i=1; i<=arr[0]; ++i){
    newArr.push(arr[i]);
  }
  const testCase = { 
    N: arr[0], 
    arr: newArr,
  };
  inputTestCase.push(testCase);
}
// 문제 풀기
for(let i=0; i<num; ++i){
  let count = 0;
  let sum = 0;

  for(let j=0; j<inputTestCase[i].N; ++j){
    sum += inputTestCase[i].arr[j];
    //끊임없는 변수 할당 문제 : const -> let으로 변경 후 해결
  }
  avg = sum/inputTestCase[i].N

  for(let k=0; k<inputTestCase[i].N; ++k){
    if (avg < inputTestCase[i].arr[k]){
      count++;
    }
  }
    result = (count/inputTestCase[i].N * 100).toFixed(3);
    console.log(result + "%");
}

💻 CODE REVIEW

😥 라매 개발자 영상을 보고 입력을 받는 것까지는 어찌저찌 했는데 문제풀이에서 많은 오류가 났다. 처음에 sum은 변하는 값인데 const로 변수 할당을 해놓아서 애를 먹었다. let으로 바꾸니 바로 해결되었다.
🧐 다른 사람들의 풀이를 찾아보니까 내 코드는 입력받는 과정이 너무 복잡했다. 하지만 연습하는 과정이고 좀 더 구체적으로 코드를 작성한 거라고 생각한다.
😎 나는 inputTestCase에 학생 수 N과 각각의 점수 arr 배열을 따로 넣어두고 문제를 풀었다. 이 문제는 입력을 나누는게 중요한 문제였다. 그래야 for문을 사용할 때 arr에서 점수 평균을 구하기도 편리하고, 변수 i의 범위를 정할 때도 학생 수 N을 이용해 범위를 정해줄 수 있기 때문이다. 비율 계산은 for문과 if문을 이용했다. 총 학생 수에서 평균을 넘은 학생 수만 변수 count에 저장하고 ‘평균을 넘은 학생수(count) / 총학생수(inputTestCase[i].N) * 100’ 을 해주어 소숫점 셋째자리까지 출력해주었다.

댓글남기기