BOJ[2108] - 통계학 by JavaScript
통계학
문제
언어
- JavaScript
문제 풀이 step 1
- 오름차순으로 정렬합니다.
- 산술 평균, 중앙값, 최빈값, 범위를 구합니다.
- 최빈값은 map을 이용해서 개수를 파악해서 여러 개 있을 경우를 처리합니다.
소스 코드
const input = require("fs").readFileSync("/dev/stdin").toString().split("\n");
const getAvg = (arr, N) => {
let sum = 0;
for (let i = 0; i < N; i++) {
sum += arr[i];
}
return Math.round(sum / N);
};
const getCenter = (arr, N) => {
if (N === 1) return arr[0];
else return arr[Math.floor(N / 2)];
};
const getMode = (arr, N) => {
const map = new Map();
let max = 0;
for (let i = 0; i < N; i++) {
map.set(arr[i], map.get(arr[i]) ? map.get(arr[i]) + 1 : 1);
if (max < map.get(arr[i])) max = map.get(arr[i]);
}
const modes = new Array();
for (let [key, value] of map) {
if (value === max) modes.push(key);
}
if (modes.length === 1) return modes[0];
else return modes[1];
};
const getRange = (arr, N) => arr[N - 1] - arr[0];
const solution = (input) => {
const N = Number(input[0]);
const arr = input
.slice(1, N + 1)
.map(Number)
.sort((a, b) => a - b);
let max = 0;
for (let i = 0; i < N; i++) {
let weight = arr[i] * (i + 1);
if (weight > max) max = weight;
}
const result = `${getAvg(arr, N)}\n${getCenter(arr, N)}\n${getMode(
arr,
N
)}\n${getRange(arr, N)}`;
console.log(result);
};
solution(input);