강의로 돌아가기
문지원

자바스크립트 소팅 질문입니다.

function solution(array, commands) {
    var answer = [];
    for(var i=0; i<commands.length; i++){
        var arr = array.slice(commands[i][0]-1, commands[i][1])
        arr.sort(function(a,b){
            return a-b
        })
        answer.push(arr[commands[i][2]-1]);
    }
    return answer;
}

function solution(array, commands) {
    var answer = [];
    for(var i=0; i<commands.length; i++){
        var arr = array.slice(commands[i][0]-1, commands[i][1])
        arr.sort()
        answer.push(arr[commands[i][2]-1]);
    }
    return answer;
}

위와 아래는 같은 동작을 하는 걸로 알고 있는데

아래 코드는 실패케이스가 있더라구요.

근데 이런 문제가 문제인 이유 말고도 질문해도 되나여?

작성중인 코드―solution.js
1
2
3
4
5
6
7
8
9
10
11
function solution(array, commands) {
    var answer = [];
    for(var i=0; i<commands.length; i++){
        var arr = array.slice(commands[i][0]-1, commands[i][1])
        arr.sort(function(a,b){
            return a-b
        })
        answer.push(arr[commands[i][2]-1]);
    }
    return answer;
}
2 개의 답변
Demi

자바스크립트를 처음 배울때(?) 주로 하는 실수인데요.
자바스크립트의 array.sort()는 문자열을 기준으로한 소팅입니다.

예를 들어, 배열 [100,2]가 주어졌을때,

  • 사람은: 100, 2를 숫자로 생각해 소팅하기때문에 [2,100]로 소팅되길 기대하지만
  • 자바스크립트는: 문자열에서는 100 < 2이기 때문에, [100,2] 순으로 소팅을 합니다.

MDN sort 문서 를 보시면 이와 비슷한 예를 볼 수 있어요.

LEE SUK JAE

전자가 선생님이 원하시는 결과로 정렬될거에요.

// 오름차순
arr.sort(function(a,b){
            return a-b
        })

// 문자열 순
arr.sort()
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.