첫 번째 풀이
function getKValue (array, command) {
const newArray = array
.slice(command[0] - 1, command[1])
.sort((a, b) => a - b);
return newArray[command[2] - 1];
};
function solution (array, commands) {
let answer = [];
for (let i = 0; i < commands.length; i++) {
answer.push(getKValue(array, commands[i]));
}
return answer;
};
이 풀이해서 약간 헤맸던 점이 있는데, 바로 sort메서드 때문이다. 아무 생각 없이 메서드에 인자를 넘기지 않았는데, 이렇게 요소가 문자열로 변환되고 각 문자의 유니코드 값에 따라 정렬된다고 한다. 이러한 결과를 원하는 것이 아니라면 비교하는 함수를 콜백으로 넘기도록 하자.
두 번째 풀이
function solution(array, commands) {
return commands.map((command) => {
const [iIndex, jIndex, kIndex] = command;
const newArray = array.slice(iIndex - 1, jIndex).sort((a, b) => a - b);
return newArray[kIndex - 1];
});
}
객체나 배열의 요소를 쉽게 추출하는 Destructuring이 빛난 풀이다. 훨씬 직관적이다. 그리고 commands 배열에 map을 사용해 바로 새로운 배열을 리턴해서 답을 구하니 불필요한 변수를 줄일 수 있었다.
도움이 된 자료
K번째수, (2022.02.18), https://programmers.co.kr/learn/courses/30/lessons/42748