2. 정렬 - K번째수

한 개의 테스트에서 걸렸다. 처음에 생각해본 경우의 수는 commands의 [5,1,3] 처럼 startIndex > endIndex인 경우 등 돌발상황이 생길 때가 아닐까 생각해보았다. 혹은 길이가 10인 배열이 파라미터로 들어왔을 때, 그 배열의 길이가 넘어가는 인덱스 값이 들어왔다거나. ('15번 째 요소를 구하라' 라던지..)
그런데 정답은 문제의 주제에 맞게 정렬 함수에 대한 것이었다. 그래서 자바스크립트에선 정렬 함수를 어떻게 써야 하는지 mdn의 sort function에 대한 내용을 보았다.

실제 내용은 이보다 더 길다. sort안에 배열의 두 원소를 어떻게 비교할 것인지에 대한 비교함수를 넣었을 때와 넣지 않았을 때 어떻게 정렬이 되는지 원문에선 상세히 적혀져있다.

따로 compareFunction을 정의하지 않으면, undefined가 아닌 모든 배열의 요소들은 UTF-16 code에 의해 정의된 문자열로 변형된 다음, 그 순서에 따라 정렬된다. 이 규칙에서는 80이 9보다 오히려 더 작다. 90과 9을 비교하는 게 아니라, "80"과 "9"를 비교하기 때문이다.
그래서 오름차순으로 비교하고 싶다면 sort((a,b)=>a-b) 이런 식으로 적어준다. 이는 자바스크립트 내장함수인데 두 원소를 비교한다음 큰 원소를 뒤로 보낸다.

function solution(array, commands) {
    var answer = [];
    commands.forEach((command)=>{
      answer.push(array.slice(command[0]-1,command[1]).sort((firstNum,secondNum)=>firstNum-secondNum)[command[2]-1]);
    })
    return answer;
}
arr = [1,2,10]

arr.sort()
arr.sort((firstNum,secondNum)=>firstNum-secondNum)
...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...
>> [1,10,2]	//
>> [1,2,10]	//

References

  1. Array.prototype.sort() -
    (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)

좋은 웹페이지 즐겨찾기