중앙값은 어떤 주어진 값들을 크기의 순서대로 정렬했을 때 가장 중앙에 위치하는 값을 의미합니다. 예를 들어 1, 2, 7, 10, 11의 중앙값은 7입니다. 정수 배열 array가 매개변수로 주어질 때, 중앙값을 return 하도록 solution 함수를 완성해보세요.
array | result |
---|---|
[1, 2, 7, 10, 11] | 7 |
[9, -1, 0] | 0 |
sort()
9
: 9/2 = 4.5 가운데 숫자의 순서는 5번째15
: 15/2 = 7.5 가운데 숫자의 순서는 8번째Math.ceil
을 써서 가운데 요소의 순서를 구했고, 인덱스 번호는 순서에서 -1
을 해줘야되므로 아래와 같이 코드를 작성했다.function solution(array) {
const array2 = array.sort();
const middle = Math.ceil(array2.length / 2);
return array2[middle-1];
}
잘했다 생각했는데 4문제 통과/6문제 실패 🥲
무엇이 문제일꼬 🤔
테스트를 추가해보았다. result 로 22가 출력되어야 한다.
허거거겅 29가 나왔다.
차근차근 다시 생각해보자.
array = [43, 29, 60, 18, 5, 22, 19]
const array2 = array.sort() = [5, 18, 19, 22, 29, 43, 60];
const middle = Math.ceil(array2.length / 2) = Math.ceil(7 / 2);
const middle = 4;
return array2[middle-1] = array2[3] = 22;
22맞는데 ........!
console.log 를 찍어봐야겠다.
이럴수가!! 오름차순 sort
부터 잘못됐다. 테스트 추가하기 전에 console.log(array2) 를 찍어보긴 했지만 테스트 1,2 가 잘 나와서 문제 없다고 생각했는데 왜 5가 맨앞으로 안간걸까??
찾아보니 나와 유사한 답변을 한 분이 있었고 그분의 질문에 대한 답변을 볼 수 있었다.
🔥 sort()는 문자열의 유니코드 순서를 따르므로 number type의 오름차순 정렬을 원하신다면 sort((a,b) => a-b)를 사용하셔야 합니다. 라는 답변 !!
전에 알고리즘 문제를 풀때에도 종종 오름차순, 내림차순 메서드를 써야될 때가 있었는데 그때는 검색을 한거라 바로 복붙을 했던건데 오늘은 검색을 안하고 a-b 인지 b-a인지 까먹고 그냥 sort()
까지만 입력하고 console.log 로 출력이 잘 나와서 넘어갔던거여서 문제가 발생한 것이다.
//오름차순 잘못 썼을 때
const array2 = array.sort();
//오름차순 올바르게 수정
const array2 = array.sort((a,b) => a-b);
function solution(array) {
const array2 = array.sort((a,b) => a-b);
const middle = Math.ceil(array2.length / 2);
return array2[middle-1];
}
깔끔하게 이렇게 작성할 수도 있다.
function solution(array) {
return array.sort((a, b) => a - b[Math.floor(array.length / 2)];
}