본문 바로가기

Algorithm

[Hackerrank/js] 중앙값 찾기 (Math.floor)

문제 : 

숫자로 이루어진 배열에서 중앙값을 구하기 

*중앙값 : 주어진 값을 정렬했을 때 가운데에 자리하는 숫자. 배열 내 숫자의 갯수가 짝수개인 경우 두 수의 중간값

 

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
}

깔끔-