프로그래머스, 중앙값 구하기
중앙값은 어떤 주어진 값들을 크기의 순서대로 정렬했을 때 가장 중앙에 위치하는 값을 의미합니다. 예를 들어 1, 2, 7, 10, 11의 중앙값은 7입니다. 정수 배열 array가 매개변수로 주어질 때, 중앙값을 return 하도록 solution 함수를 완성해보세요.
1) 최대값(Math.max)
2) 최소값(Math.min)
3) 중앙값은? 따로 구하는 메소드가 없는 것 같다. sort를 통해서 요소를 정리한 후에 가공할 필요가 있어 보인다.
function solution(array) {
let answer = array.reduce((prev, cur) => {
return prev+cur;}, 0);
return parseInt(answer/array.length)
}
reduce()를 통해서 배열데이터를 전부 합산한 후에 나눔셈을 하였고, 소수점은 버리고 산출하려고 했다. 문제는 이러한 식의 발상이 오류를 발생시킨다는 점이다.
[9, -1, 0] 이라는 배열이 주어졌다고 하자. 합산은 8이고 이를 3으로 나누면, 2.... 이다. 그러나 배열에서 중앙값은 0이기에 오류를 발생시킨다.
[1,2,3,4,5] 라는 배열에서는 아마도 정상적으로 작동할 것이다. 합산은 15이고, 이를 5로 나누면 3이되기 때문이다. 그러나 항상 중앙값을 구하지 않는다는 점에서 이 코드는 잘못되었다.
function solution(array) {
array.sort((a,b) => a-b);
let answer = Math.floor(array.length/2);
console.log(array);
console.log(array[answer]);
return array[answer]
}
solution([1,23,3,4,7,5, -12, -23, 100])
위의 코드를 codepen에다가 기록해보자. 그려면 중앙값인 4가 출력될 것이다.
배열의 길이에서 중앙으로 돌아가기 위해서 Math.floor와 (array.length/2)가 기록되었다.
여기서 관건은 소수점의 자리를 버린다는 점이다. 이런 점에서 Math.floor()도 있지만, .paraInt()를 통해서 소수점을 버리고 양수만 가져울 수 있다.