어떤 수들이 있을 때, 그 수들을 대표하는 값으로 가장 흔하게 쓰이는 것은 평균이다. 평균은 주어진 모든 수의 합을 수의 개수로 나눈 것이다. 예를 들어 10, 40, 30, 60, 30의 평균은 (10 + 40 + 30 + 60 + 30) / 5 = 170 / 5 = 34가 된다.
평균 이외의 또 다른 대표값으로 중앙값이라는 것이 있다. 중앙값은 주어진 수를 크기 순서대로 늘어 놓았을 때 가장 중앙에 놓인 값이다. 예를 들어 10, 40, 30, 60, 30의 경우, 크기 순서대로 늘어 놓으면
10 30 30 40 60
이 되고 따라서 중앙값은 30이 된다.
다섯 개의 자연수가 주어질 때 이들의 평균과 중앙값을 구하는 프로그램을 작성하시오.
첫째 줄부터 다섯 번째 줄까지 한 줄에 하나씩 자연수가 주어진다. 주어지는 자연수는 100 보다 작은 10의 배수이다.
첫째 줄에는 평균을 출력하고, 둘째 줄에는 중앙값을 출력한다. 평균과 중앙값은 모두 자연수이다.
| 예제 입력 1
10
40
30
60
30
| 예제 출력 1
34
30
1) 평균 계산
const avg = input.reduce((a,b) => a+b, 0) / 5;
2) 중앙값 계산
const median = input[2];
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n").map(Number);
// 평균 계산
const avg = input.reduce((a, b) => a + b, 0) / 5;
// 중앙값 계산
input.sort((a, b) => a - b);
const median = input[2];
// 출력
console.log(avg);
console.log(median);
이번문제는 다섯개의 자연수가 주어졌을 때 평균과 중앙값을 구하는 문제였다.
평균을 구하면서 reduce를 이용하였고, 중앙값을 구하기 위해 sort로 정렬하고 중앙값을 median으로 찾는 방식을 적용했다.
이번 문제는 모든 값이 10의 배수이고 100 미만이며 개수가 5개로 고정돼 있다.
덕분에 평균이 정수로 떨어지고, 예외 처리 같은 것들을 고려하지 않아도 된다.
문제를 읽고 조건을 정확히 파악하는 것이 얼마나 중요한지 다시 느꼈다.
조건 하나가 로직을 단순하게 만들어 준다.