문제 설명
대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다. 첫째 줄에는 테스트 케이스의 개수 C가 주어진다.
둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.
각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.
입출력
input | output |
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 fs = require("fs");
let input = fs.readFileSync("./input.txt").toString().trim().split('\n')
for(let i = 1; i < input.length; i++){
let splited = input[i].split(' ').map(Number)
let len = splited.shift()
let avr = 0
avr = splited.reduce((a,b)=>a+b) / len
let num = splited.filter((a)=>a>avr)
let answer = num.length/len*100
console.log(answer.toFixed(3)+'%')
}
1. 각 줄로 구분하여 배열을 만들고, 다시 공백으로 구분하여 요소를 배열로 만든다.
map을 이용하여 요소들을 숫자로 만들고, len에는 첫번째 값을 shift한다.
자연스레 splited에는 5,7,3,3,9와 같은 length값은 빠진다.
예를 들면, 50 50 70 80 100 이 숫자들이 splited배열에 담긴다.
2. 각 구분된 숫자들을 reduce로 더한 뒤, len으로 나누어 평균을 구한다.
3. 기존 숫자들 중 평균치보다 높은 숫자를 카운트해야 한다.
filter로 avr보다 큰 값만 num에 새롭게 만들어주고, 몇 명인지만 알면 되기 때문에
담긴 값의 길이를 구해서 전체 명수인 len으로 나누고 100을 곱해서 퍼센트를 구한다.
소숫점 셋째자리에서 반올림해서 답을 구해야 하므로 toFixed를 사용했고,
뒤에 %기호를 붙였다.
코멘트
코드는 나름 푼 시간에 비해 간결하게 나왔지만.. 어려운 문제가 아닌데 오래 걸렸다.
어떠한 접근방식보다 자바스크립트에 미숙한 부분들이라 여기에 시간투자되는 부분이 참 아까웠다.
'개발 > 코딩테스트' 카테고리의 다른 글
[백준 | JavaScript] 2566 최댓값 (1) | 2023.05.24 |
---|---|
[백준 | JavaScript] 25206 너의 평점은 (0) | 2023.05.23 |
[백준 | JavaScript] 1157 단어 공부 (0) | 2023.05.22 |
[백준 | JavaScript] 10988 팰린드롬인지 확인하기 (1) | 2023.05.21 |
[백준 | JavaScript] 2908 상수 (0) | 2023.05.21 |