이 문제의 경우 헷갈리기 쉬운 부분이 입력과 출력만 보면 마치 내림차 순으로 반환해야 하는 것처럼 보입니다. 하지만, 전혀 그렇지 않습니다. 오히려 내림차순으로 반환하면 배열의 순서가 뒤바뀌어 틀렸다고 나옵니다.
여러가지 해답이 존재할 수 있는데, 결국엔 가장 작은 값을 빠르게 찾아서 그 값을 지워주면 됩니다.
여기서 indexOf
나 findIndex
등의 메소드를 사용 가능합니다.
그런데 제출하신 뒤에 소요시간을 잘 살펴보시면 findIndex
를 사용했을 때 매우 느립니다.
이 내용을 보면, indexOf
는 단순히 값을 파라미터로 받고, findIndex
는 콜백을 파라미터로 받습니다. 결과적으로는 findIndex
가 더 느립니다. 다만, 복잡한 조건의 값을 찾을 때 유용하다고 합니다.
대부분의 작은 배열에서는 유의미한 속도차이가 나지 않으니, 상황에 따라 적절한 것을 사용하면 될 것 같습니다.
let solution = (arr) => {
arr.splice(arr.indexOf(Math.min(...arr)), 1);
return arr.length === 0 ? [-1] : arr;
};