[JS] 백준 4344. 평균은 넘겠지

n-u·2022년 7월 12일
0

Algorithm

목록 보기
25/33
post-thumbnail

백준 4344. 평균은 넘겠지

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

문제 해결 접근 순서

1.반 평균을 구한다.
2.반 평균을 넘은 학생 수를 구한다.
3.학생수 / 전체 학생수의 비율을 구한다.

❌ 제출한 풀이

for(let i = 1; i <= input[0]; i++){
    let sum = 0;
    let score = 0;
    let filterArr = [];

    // 1.반평균 구하기
    let numArr = input[i].split(' ').map((i)=>+i);
    for(let j = 1; j <= numArr[0]; j++){
        sum += numArr[j]; 
    }
    score = sum/numArr[0];

    //2. 반 평균을 넘는 학생 수 구하기
    filterArr = numArr.filter((i)=> i > score);

    //3. 학생 비율 구하기
    let rate = (filterArr.length)/ numArr[0] * 100;
    console.log(rate.toFixed(3) + '%');
}
  • 출력된 값은 똑같이 나왔는데 오답으로 처리 되었다.



⭕ 제출한 풀이

const fs = require('fs');
const file = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(file).toString().split('\n');

for(let i = 1; i <= input[0]; i++){
    let sum = 0;
    let score = 0;
    let filterArr = [];

    // 1.반평균 구하기
    let numArr = input[i].split(' ').map((i)=>+i);
    let studentNum = numArr.shift()
    for(let j = 0; j < studentNum; j++){
        sum += numArr[j]; 
    }
    score = sum/studentNum;

    //2. 반 평균을 넘는 학생 수 구하기
    filterArr = numArr.filter((i)=> i > score);

    //3. 학생 비율 구하기
    let rate = (filterArr.length)/ studentNum * 100;
    console.log(rate.toFixed(3) + '%');
}
  • 틀린 코드에서 numArr[0]으로 사용한 부분을 shift()메서드를 이용해 잘라 변수에 저장하여 그 값으로 대체 했더니 정답으로 처리 되었다.
  1. 반 평균 구하기
    • numArr배열의 모든 요소를 sum 값에 누적시킨다.
    • 누적된 값의 평균값을 score변수에 넣는다.
  2. 반 평균을 넘는 학생 수 구하기
    • filter()메서드를 이용해 score값이 큰 요소들만 들어있는 배열을 만든다.
  3. 학생 비율 구하기
    • 필터링 된 값을 가진 배열의 길이로 학생수를 구한 후, 전체 학생 수로 나누어 % 값을 얻는다.
    • 소수점 3자리 수의 값을 얻기 위해 toFixed()메서드를 이용해 소수점 자리수의 값을 얻는다.


문제를 풀면서 알게 된 것

  • toFixed()메서드를 사용하면 원하는 소수점 자리를 얻을 수 있다.
  • 필요에 의해 배열의 요소를 제거하는 것
    • shift()메서드를 이용하면 제거된 값을 반환한다.



Reference

소수점 자리 반올림, 내림, 올림 포스팅
shift()를 이용해 값을 따로 저장

profile
기록하며 발전하는 삶

0개의 댓글