문제 :
숫자로 이루어진 배열에서 중앙값을 구하기
*중앙값 : 주어진 값을 정렬했을 때 가운데에 자리하는 숫자. 배열 내 숫자의 갯수가 짝수개인 경우 두 수의 중간값
function findMedian(arr,n) {
arr = arr.sort((a,b) => a - b);
n = Math.floor(n / 2);
return (arr[n])
}
Hackerrank는 odd(홀수)만 주어져 제출 했을 때는 합격점을 받았지만,
문제를 읽을 때는 odd가 홀수를 의미하는지도 몰랐기 때문에
사실상 나는 들어오는 정수 n이 홀수인지 짝수인지 상관없이 짰으니 위 코드에는 문제가 있다.
짝수가 들어오는 경우
[0,1,2,3,4,5]
function findMedian(arr,n) {
arr = arr.sort((a,b) => a - b);
m = Math.floor(n / 2);
let a = arr[m]; // arr[3] == 3
let b = arr[n-1-m]; //arr[2] ==2
return (a + b) / 2
}
위의 조건을 추가하여 다시 작성해보면
function findMedian(arr,n) {
arr = arr.sort((a,b) => a - b);
m = Math.floor(n / 2);
// 홀수 인 경우
if (n % 2 != 0 ) {
return arr[m]
}
return (arr[n] + arr[n-1-m]) / 2
}
근데 생각해 보니 홀수로 들어오나 짝수로 들어오나
(arr[n] + arr[n-1-m]) / 2
로 계산하면 답이 나온다
function findMedian(arr,n) {
arr = arr.sort((a,b) => a - b);
m = Math.floor(n / 2);
return (arr[n] + arr[n-1-m]) / 2
}
깔끔-
'Algorithm' 카테고리의 다른 글
[HackerRank/js] Diagonal Difference (0) | 2022.07.05 |
---|---|
[HackerRank/js] Lonely Integer (배열 내 중복되지 않은 숫자 찾기) (0) | 2022.07.05 |
[HackerRank/js] Time Conversion (12h를 24h로 변환하기) (0) | 2022.07.04 |
[HackerRank/js] Mini-Max Sum (배열의 합을 구해 비교하기) (0) | 2022.07.04 |
[Hackerrank/js] Plus Minus (0) | 2022.07.04 |