230220_TIL

reggias·2023년 2월 22일
0

I learned

목록 보기
44/62

배열의 중간값을 리턴하는 함수를 만드는 알고리즘 문제였으나 중간값을 찾는 코드는 구현해냈지만 배열을 오름차순으로 정렬하는 코드는 구현해보았으나 작동이 제대로 이루어지지 않았음

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

Restrictions

array의 길이는 홀수
0 < array의 길이 < 100
-1,000 < array의 원소 < 1,000

What was the problem

배열을 오름차순으로 정렬해주는 코드가 제대로 작동하지 않음

Things i tried

첫번째 코드

function solution(array) {
    if (array.lengh === 1) {
        const answer = array[0]
        return answer;
    } else {
        const middle = Math.floor(array.length / 2)
        const answer = array.sort()[middle]
        return answer;
    }
}

console.log(solution([1, 2, 3, 4, 5])) // 3
console.log(solution([9, -1, 0])) // 0

배열의 길이가 1 이면 무조건 배열의 첫번째 인덱스의 값을 리턴하도록 하고 그게 아니면 중간인덱스를 구하는 것과 배열을 오름차순해준 후 중간인덱스로 값을 리턴하게끔 만들었음
그런데 배열의 값을 [4, 6, 4, 23, 8, 12] 를 매개변수로 가져오면 sort()에서 [12, 23, 4, 4, 6, 8]로 정렬이 되는 것을 확인함.

how did you solve it?

두번째 코드

const answer = array.sort((a, b) => {
    return a - b;
})[middle]

sort() 메서드에 대해 다시 공부해서 코드를 변경하였음. 또한 처음 조건을 주었던 배열의 길이가 1일 때라는 조건은 필요없음을 알고 삭제하였음.

All code

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

What new did you learn?

sort() 안에 있는 함수는 내장되어 있는 compareFn 함수로 배열의 숫자들을 오름차순으로 바꿔주는 함수임. 이 괄호 안이 비어있으면 요소를 문자열로 변환하고 유니코드 포인트 순서로 문자열을 비교하여 정렬하게됨. 그래서 [4, 6, 4, 23, 8, 12]라는 배열이 [12, 23, 4, 4, 6, 8]로 정렬되었던 것임.

참고링크 : 모질라

profile
sparkle

0개의 댓글