문제 번호
알고리즘 분류
구현, 정렬
문제 풀이
특별한 알고리즘은 없는 문제이다. 문제에서 주어진 내용대로 구현해서 출력만 하면된다.
산술평균
// 산술 평균
let sum = 0;
for (let i = 0; i < input.length; i++) {
sum += Number(input[i]);
}
arithmeticMean = Math.round(sum / input.length);
console.log(arithmeticMean);
중앙값
// 중앙값.
mid = Number(input[parseInt((input.length) / 2)]);
console.log(mid);
최빈값
문제에서 양수와 음수 모두 등장하기때문에 num 배열의 0번 인덱스부터 4000 인덱스는 양수를 저장하기 위해서 사용하였고, 4001번부터 8000번 까지는 음수를 저정하기 위해서 사용하였다. 그리고나서 최빈수가 되기 위해서는 최소 몇번 등장해야하는가를 계산하여 최빈값 후보들을 mostAppearances 배열에 추가하였다.
// 최빈값.
let max = 0;
mostAppearances = [];
let num = new Array(8001);
num.fill(0, 0, 8001);
// 각 숫자가 몇번씩 등장했는지 계산한다.
for (let i = 0; i < input.length; i++) {
if (input[i] < 0) {
num[-(input[i]) + 4000]++;
}
else if (input[i] >= 0) {
num[Number(input[i])]++;
}
}
// 몇 번 이상 등장해야 최빈수가 될 수 있는지 확인한다.
for (let i = 0; i < num.length; i++) {
if (num[i] > max) max = num[i];
}
for (let i = 8000; i >= 4001; i--) {
if (num[i] !== 0 && num[i] >= max) {
mostAppearances.push(-(i - 4000));
}
}
for (let i = 0; i <= 4000; i++) {
if (num[i] !== 0 && num[i] >= max) {
mostAppearances.push(i);
}
}
if (mostAppearances.length === 1) console.log(mostAppearances[0]);
else if (mostAppearances.length >= 2) console.log(mostAppearances[1]);
범위
// 범위.
range = input[input.length - 1] - input[0];
console.log(range);
전체코드
const fs = require('fs');
const input = fs.readFileSync('통계학/input.txt').toString().trim().split('\n');
const N = Number(input.shift());
const sol = function () {
let arithmeticMean;
let mid;
let mostAppearances;
let range;
input.sort((a, b) => a - b);
// 산술 평균
let sum = 0;
for (let i = 0; i < input.length; i++) {
sum += Number(input[i]);
}
arithmeticMean = Math.round(sum / input.length);
console.log(arithmeticMean);
// 중앙값.
mid = Number(input[parseInt((input.length) / 2)]);
console.log(mid);
// 최빈값.
let max = 0;
mostAppearances = [];
let num = new Array(8001);
num.fill(0, 0, 8001);
// 각 숫자가 몇번씩 등장했는지 계산한다.
for (let i = 0; i < input.length; i++) {
if (input[i] < 0) {
num[-(input[i]) + 4000]++;
}
else if (input[i] >= 0) {
num[Number(input[i])]++;
}
}
// 몇 번 이상 등장해야 최빈수가 될 수 있는지 확인한다.
for (let i = 0; i < num.length; i++) {
if (num[i] > max) max = num[i];
}
for (let i = 8000; i >= 4001; i--) {
if (num[i] !== 0 && num[i] >= max) {
mostAppearances.push(-(i - 4000));
}
}
for (let i = 0; i <= 4000; i++) {
if (num[i] !== 0 && num[i] >= max) {
mostAppearances.push(i);
}
}
if (mostAppearances.length === 1) console.log(mostAppearances[0]);
else if (mostAppearances.length >= 2) console.log(mostAppearances[1]);
// 범위.
range = input[input.length - 1] - input[0];
console.log(range);
}
sol();
특이사항
Math 내장 객체에 있는 round 메서드를 사용하여 반올림을 하였다.
'Algorithm > BaeKJoon' 카테고리의 다른 글
[JS][백준]20055_컨베이어 벨트 위의 로봇 (0) | 2021.09.09 |
---|---|
[JS][백준]11650_좌표 정렬하기 (1) | 2021.08.24 |
[JS][백준]1260_DFS와 BFS (0) | 2021.08.24 |
[JS][백준]1436_영화감독 숌 (0) | 2021.08.19 |
[JS][백준]1018_체스판 다시 칠하기 (0) | 2021.08.19 |