통계학

문제

언어

  • 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);