배열 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 함수를 작성해주세요.
사실 sort 방법이나, k번째 수를 찾는 건 문제가 없었다. 기존 javascript에서 sort를 이용해서 오름차순으로 정렬하는 것을 해봤기 때문이다.
제일 고민이 많이 되는 것은 1번 array를 어떻게 자를 것인가? 이것인데 방법은 다양하다고 생각했다. slice를 이용해서 자를 수도 있고, for문을 이용해서 자를 수도 있고 내가 생각하지 못한 방법으로 자를 수도 있을 거라고 생각했다.
function solution(array, commands) {
var answer = [];
for(let i = 0; i < commands.length; i++){
let temp = [];
for(let j = commands[i][0] - 1; j < commands[i][1]; j++) {
temp.push(array[j]);
}
temp.sort(function(a, b){
return a - b;
});
answer.push(temp[commands[i][2] - 1]);
}
return answer;
}
function solution(array, commands) {
return commands.map(command => {
const [sPosition, ePosition, position] = command
const newArray = array
.filter((value, fIndex) => fIndex >= sPosition - 1 && fIndex <= ePosition - 1)
.sort((a,b) => a - b)
return newArray[position - 1]
})
}
내가 사용한 방법에서 for문을 map을 이용했고, array의 filter기능을 이용해서 index범위가 해당하는 범위의 값만 newArray라는 새로운 배열에 넣어줬다.
const [sPosition, ePosition, position] = command
는 한눈에 봐도 엄청 직관적으로 보여서 깔끔한 코딩이 가능한거 같다. 이런 코딩을 배워야 하는데 언제쯤 가능 할지....
내가 지금 까지 사용하지 않았던 기능들 filter 같은 기능들을 이용하면, 훨씬 깔끔하고 멋진 source 코드를 작성할 수 있는 것 같다.
또한 javascript의 개념 및 기초가 부족한 것 같아서 조금 더 공부를 해야 할 것 같다.