[js] 평균 소득액 구하기_Disaster Assistance Amount
[문제 설명]
재난 지원금을 지급하기 위해 국민의 평균 소득액을 구하려고 합니다.
국민의 소득을 그대로 평균 내면 잡음이 심하여, 최상위 최하위 1건씩 제외한 소득 평균을 출력하는 함수, solution을 완성해주세요.
예를 들어, 국민의 소득액 arr가 [1, 3, 3, 3, 5]일 때, 최상위 최하위 1건씩 제외한 소득 평균은 3입니다.
[제한 사항]
- 국민의 소득액 arr는 정렬되어있지 않습니다.
- 평균의 소수점은 절삭 후 출력합니다.
[입력 형식]
- 국민의 소득액 정보 arr는 길이가 1 이상 1\,000 이하의 배열입니다.
- 소득액인 arr의 각 요소는 0 이상 1\,000\,000 이하의 정수입니다.
[출력 형식]
- 최상위 최하위 1건씩 제외한 소득 평균을 int 형식으로 출력합니다.
[문제 풀이]
function solution(arr) {
arr.sort((a, b) => a - b);
arr.pop();
arr.shift();
let result = arr.reduce(function add(sum, n) {
return sum + n;}, 0);
return Math.floor(result / arr.length);
}
[해설]
arr.sort로 배열을 오름차순으로 정렬합니다.
pop 함수와 shift 함수로 배열의 가장 앞, 뒤의 요소를 제거합니다.
reduce 함수로 배열의 합을 구하고, Math.floor로 소수점을 버린 정수 평균을 구합니다.
*arr.sort([compareFunction])
배열의 요소를 적절한 위치에 정렬한 후 그 배열을 반환하는 메서드여기서 compareFunction은 매개변수. 정렬 순서를 정의합니다.
- 생략시 : 유니코드 포인트 순서로 문자열 비교 정렬
- a ,b 두개의 element를 파라미터로 입력 받는 경우
- compareFunction(a, b) < 0 : a가 먼저 옴
- compareFunction(a, b) == 0 : 변경 X
- compareFunction(a, b) > 0 : b가 먼저 옴
문자열 대신 숫자를 비교하기 위해서 아래와 같은 코드를 작성할 수 있습니다.
이때 숫자 배열은 오름차순으로 정렬합니다.
function compareNumbers(a, b) {
return a - b;
}
*.pop() ↔ .push()
배열에서 마지막 요소를 제거하고 그 요소를 반환합니다.
배열에 마지막 요소 값을 추가하는 함수는 .push()
*.shift() ↔ .unshift()
배열에서 첫 번째 요소를 제거하고 제거된 요소를 반환합니다.
이 메서드는 배열의 길이를 변하게 합니다.
배열에 첫 번째 요소의 값을 추가하는 함수는 .unshift()
*.reduce()
배열의 각 요소에 주어진 리듀서(reducer) 함수를 실행하고 하나의 결과값을 반환합니다.
배열의 모든 값을 합산하려면 아래와 같은 형식으로 작성할 수 있습니다.
var sum = [0, 1, 2, 3].reduce(function (accumulator, currentValue) {
return accumulator + currentValue;
}, 0);
/* 화살표 함수로 작성 */
var total = [ 0, 1, 2, 3 ].reduce(
( accumulator, currentValue ) => accumulator + currentValue,
0
);
그 외의 쓰임은 포스팅 아래 MDN 사이트를 참고해주세요.
* Math.floor()
주어진 숫자와 같거나 작은 정수 중에서 가장 큰 수를 반환합니다.그외 Math.ceil()은 소수점 올림, Math.round()는 소수점 반올림
[다른 사람 풀이]
function solution(arr) {
arr.sort((a, b) => a - b);
arr.shift();
arr.pop();
return parseInt(arr.reduce((a, b) => a + b) / arr.length);
}
제가 작성한 코드와 거의 같은 맥락입니다.
실수를 정수로 변환할 때는 Math.floor() 대신 parseInt()도 사용할 수 있다는 점을 보여드리려고 가져왔습니다..
*parseInt()
(mdn) 문자열 인자를 파싱하여 특정 진수의 진수의 정수를 반환합니다.
실수나 string 객체를 정수로 변환할 수 있으며 변환된 타입은 모두 Number입니다.
[느낀점]
다양한 함수를 적절하게 사용했을 때 , 간결하고 가독성 좋은 코드를 작성할 수 있다는 부분을 다시 한 번 알았습니다.
mdn 사이트를 자주 접속하여 함수들의 기능을 익힐 수 있도록 하려 합니다.
[github] - DisasterAssistanceAmount.js
(mdn) Array.prototype.reduce() - JavaScript | MDN (mozilla.org)