배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다.
예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면
배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solution 함수를 작성해주세요.
array | commands | return |
---|---|---|
[1, 5, 2, 6, 3, 7, 4] | [[2, 5, 3], [4, 4, 1], [1, 7, 3]] | [5, 6, 3] |
[1, 5, 2, 6, 3, 7, 4]를 2번째부터 5번째까지 자른 후 정렬합니다.
[2, 3, 5, 6]의 세 번째 숫자는 5입니다.
[1, 5, 2, 6, 3, 7, 4]를 4번째부터 4번째까지 자른 후 정렬합니다.
[6]의 첫 번째 숫자는 6입니다.
[1, 5, 2, 6, 3, 7, 4]를 1번째부터 7번째까지 자릅니다.
[1, 2, 3, 4, 5, 6, 7]의 세 번째 숫자는 3입니다.
function solution(array, commands) {
const answer = new Array();
for (let i = 0; i < commands.length; i++) {
const 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) {
const answer = new Array();
for (let cmd of commands) {
const arr = array.slice(cmd[0] - 1, cmd[1]);
arr.sort((a, b) => {return a - b;});
answer.push(arr[cmd[2] - 1]);
}
return answer;
}
sort( )
함수는 기본적으로 원소들을 문자열로 변환한 뒤 UTF-16 코드 유닛 값을 기준으로 정렬하는 함수이다. 따라서 숫자 정렬을 하게 되면 [1, 7, 10, 2, 5]
라는 배열이 [1, 10, 2, 5, 7]
으로 정렬되는 불상사가 일어나게 된다. 이러한 경우 (a, b) => a - b와 같은 비교 함수를 작성해주어야 [1, 2, 5, 7, 10]
의 형태로 숫자 정렬이 이루어진다.