빈도수 다른분 참고 아 max구하는 법만 알았어도 까비
const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().trim().split('\n');
let N = Number(input.shift());
let numArr = input.map(x => +x);
let len = numArr.length;
let answer = '';
let avg = center = countNum = range = 0;
numArr.sort(function (a,b) {return a - b;});
//각 숫자를key 그 숫자의 빈도를 value값에 담음
const uniq = numArr.reduce((accu, curr) => {
accu[curr] = (accu[curr] || 0)+1;
return accu;
}, {});
let minArr = [];
let uniqMaxNum = Math.max.apply(null, Object.values(uniq));
Object.keys(uniq).forEach(function(key) {
if(uniq[key] === uniqMaxNum) {
minArr.push(key);
}
});
if(minArr.length > 1) {
minArr.sort(function (a,b) {return a - b;});
countNum = minArr[1];
} else {
countNum = minArr[0];
}
let sum = numArr.reduce((a,b) => {return a+b;});
avg = Math.round(sum/N);
center = numArr[Math.floor(len/2)];
range = numArr[len-1] - numArr[0];
answer = avg + '\n' + center + '\n' + countNum + '\n' + range;
console.log(answer);
빈도구하는 법
1. 각 숫자를 key값으로, 그 숫자의 빈도수를 value값으로 가지는 딕셔너리 uniq을 생성
2. nuiq에서 value가 가장 큰 수를 uniqMaxNum에 저장
3. 모든 딕셔너리에서 value값이 uniqMaxNum과 같은 key값을 minArr에 저장
4. minArr길이가 1이상이면 정렬 후 배열의 두번째 값을 빈도수로 저장, 아니면 배열의 첫번째 값을 빈도수로 저장
딕셔너리의 value값의 max 구하기
Math.max.apply(null, Object.values(dic)
배열에서 가장 큰 값을 구하는 법:
Math.max.apply(null, arr)
빈도수만큼 딕셔너리에 정리
const uniq = numArr.reduce((accu, curr) => {
accu[curr] = (accu[curr] || 0)+1;
return accu;
}, {});