프로그래머스 Level 1 : K번째 수

평화로운 주말, 기분 전환을 위해 간단한 코딩 테스트 문제를 풀다 중요한 걸 배웠다 !

const array = [1, 30, 4, 21, 100000];
array.sort();
console.log(array);

위 코드를 실행하면 어처구니 없게도, [1, 100000, 21, 30, 4] 이 출력 된다..

그 이유는 sort() 함수에 compareFunction을 전달하지 않을 경우, 배열속 요소를 문자열로 변환하고, 유니 코드 포인트를 기준으로 대소 비교를 수행하기 때문이다.

이걸 몰라서… 나머지 케이스는 모두 통과하는데, 왜 2번 케이스만 통과가 안되는건지 당황했었다.

sort() 에 숫자 대소비교를 위한 (a, b) => { return a - b } 함수를 전달하여 해결 하였다.

const solution = (array, commands) => {
    return commands.reduce((answer, command) => {
        const left = command[0] - 1
        const right = command[1]
        const k = command[2] - 1
        const arr = array.slice(left, right).sort((a, b) =>  a - b )
        return [...answer, arr[k]]
    }, [])
}

참고자료

MDN Array.prototype.sort() docs

카테고리:

업데이트:

댓글남기기