본문 바로가기
알고리즘 코딩테스트

[Level 0] # 중앙값 구하기

by 댕댕발자 2024. 2. 19.
728x90
반응형

 


◆  문제 설명

중앙값은 어떤 주어진 값들을 크기의 순서대로 정렬했을 때 가장 중앙에 위치하는 값을 의미합니다. 예를 들어 1, 2, 7, 10, 11의 중앙값은 7입니다. 정수 배열 array가 매개변수로 주어질 때, 중앙값을 return 하도록 solution 함수를 완성해보세요.

제한사항
array의 길이는 홀수입니다.
0 < array의 길이 < 100
-1,000 < array의 원소 < 1,000


◆  나의 풀이(sort,.length)

배열을 정렬하고 배열의 중간값을 찾으려고 하였다.

배열의 길이가 홀수일때는 배열의 길이를 2로 나누고 반올림을 하고

배열의 길이가 짝수일때는 2로나눈값과 거기에 1을 더한값을 2로 나누어서 구하였다.

function solution(array) {
    array.sort((a, b) => a - b);
    if (array.length % 2 === 0) {
      
        return (array[array.length / 2] + array[array.length / 2 - 1]) / 2;
    } else {
       
        return array[Math.floor(array.length / 2)];
    }
}

 

 


◆  다른 풀이(sort,Math.floor)

문제를 잘못읽었다.

array의 길이는 홀수이기 때문에 홀수 짝수 경우를 생각하지 않고

sort()로 정렬후 전체 배열의 길이를 2로 나눈다음 가운데 요소만 반환하면 된다.

 

처음에 Math.floor을 왜 쓰는지 이해가 되지 않았다.

Math.floor은 소숫점 이하를 버림하는 함수이고 가운데 요소를 구하려면 전체길이를 2로 나눈후 소숫점이하를 올림하여야 하기 때문에 Math.ceil을 사용해야 하는것이 아닌가 하였다.

 

하지만 배열을 셀때는  0번째부터 시작하기 때문에 Math.floor을 사용하여 버림을 하는것이 맞다는것을 깨달았다.

 

function solution(array) {
  return array.sort((a, b) => a - b)[Math.floor(array.length / 2)];
}

 

 

 

728x90
반응형