중앙값은 어떤 주어진 값들을 크기의 순서대로 정렬했을 때 가장 중앙에 위치하는 값을 의미합니다. 예를 들어 1, 2, 7, 10, 11의 중앙값은 7입니다. 정수 배열 array
가 매개변수로 주어질 때, 중앙값을 return 하도록 solution 함수를 완성해보세요.
array | result |
---|---|
[1, 2, 7, 10, 11] | 7 |
[9, -1, 0] | 0 |
간단할줄 알았는데 진심 이거 푸느라 너무 힘들었다ㅜ
sort()
를 사용해서 오름차순으로 정렬한 다음 배열 길이를 구한 다음 가운데에 위치한 인덱스를 구하는 방법으로 시도했었는데 잘 안됨...
처음에는 sort()
하고 for문을 돌려서 배열의 길이를 알아내려 했는데 length
라는 것을 알게 되어서 for문을 지우고 .length
를 이용하여 배열의 길이를 구했다.
function solution(array) {
let length = array.sort().length;
return array[parseInt(length/2)];
// return array[Math.floor(length/2)]
}
근데 이렇게 푸니까 예제는 성공했는데 채점을 하니까 실패했다고 나옴;;
성공률이 44.4%정도였나...
그래서 찾다찾다 모르겠어서 그냥 결과를 봤는데 새로운 사실을 알게 되었다
그건 바로 숫자 배열일 때 sort()
사용 시 아래와 같이 sort((a, b) => a - b);
라고 작성해 주어야 제대로 sort()
가 된다는 것이었다... 진짜 처음 안 사실
function solution(array) {
let length = array.sort((a, b) => a - b).length;
return array[parseInt(length/2)];
// return array[Math.floor(length/2)]
}
unction solution(array) {
return array.sort((a, b) => a - b)[Math.floor(array.length / 2)];
}
문제를 풀다가 parseInt
와 floor
의 차이를 정리하고싶어짐
나는 정수 -> 실수 문제가 나오면 거의 Math.floor()
을 사용했기 때문에 parseInt
는 무엇인지 정확하게 몰랐다.
먼저 parseInt
와 floor
는 양수일 경우 둘 다 내림 한 결과값이 나온다.
let a = Math.floor("12.34"); // 12
let b = Math.floor("56.78"); // 56
let c = parseInt("12.34"); // 12
let d = parseInt("56.78"); // 56
parseInt
와 floor
의 차이점은 음수에서 나타난다.
let a = Math.floor("-12.34"); // -13
let b = Math.floor("-56.78"); // -57
let c = parseInt("-12.34"); // -12
let d = parseInt("-56.78"); // -56
let e = parseInt("12 asd"); // 1
let f = parseInt("asd 12"); // NaN
parseInt
는 소수점을 버리고 Math.floor
는 소수점을 내린다.
parseInt
Math.floor
sort()
는 오름차순으로 정렬한 후 반환해주는 함수이다.
유니코드 기준으로 sort된다.
// MDN 예시
const months = ['March', 'Jan', 'Feb', 'Dec'];
months.sort();
console.log(months);
// Expected output: Array ["Dec", "Feb", "Jan", "March"]
const array1 = [1, 30, 4, 21, 100000];
array1.sort();
console.log(array1);
// Expected output: Array [1, 100000, 21, 30, 4]
sort()
이용 시 배열이 문자가 아닌 숫자 배열일 경우엔 조심해야 한다.
const array1 = [1, 30, 4, 21, 100000];
array1.sort();
console.log(array1);
// Expected output: Array [1, 100000, 21, 30, 4]
위에서 작성한 내용처럼 유니코드 기준으로 sort되기 때문에 숫자 배열일 경우 [1, 4, 21, 30, 100000] 으로 정렬되는 것이 아니라 [1, 100000, 21, 30, 4]과 같은 순서로 정렬되기 때문에 사용 시 주의해야 한다.
기본 sort()
가 아닌 아래처럼 사용하면 오름차순으로 정렬이 가능하다.
Array.sort((a, b) => a - b)