function solution(arr) {
// 예외 처리
if(arr.length === 1) return [-1];
// spread operator로 제일 작은 수를 찾는다.
let min = Math.min(...arr);
// 제일 작은 수가 아닌 숫자들을 배열에 담아 리턴한다.
return arr.filter((num)=> num !== min);
}
우선 문제의 요구사항에 따라 배열의 길이가 1일 경우의 예외 처리를 해주었습니다.
제일 작은 수를 찾기 위해 Math.min()
메서드를 사용하고, spread 연산자
로 arr의 요소들을 전달해주었습니다.
Math.min()
는 값들을 배열 형태로 받지 않기 때문에 배열의 요소들을 전달하기 위해서는 spread 연산자
를 사용해 펼쳐주어야 합니다. (Math.max()
도 동일하게 사용합니다.)
마지막으로 filter()
메서드를 사용해 가장 작은 수가 아닌 것들만을 담은 배열을 리턴합니다.
function solution(num){
// 예외 처리
if(arr.length === 1) return [-1];
// splice()와 indexOf()를 사용해 원본 배열에서 제거한다.
arr.splice(indexOf(Math.min(...arr)), 1);
return arr;
}
예외 처리는 동일합니다.
사실 이 풀이는 splice()
메서드를 사용한 점이 참신해서 가져왔습니다. splice()
메서드는 배열의 요소를 시작 인덱스부터 원하는 개수만큼 제거하거나, 제거한 다음 새로운 요소를 추가할 때 주로 사용합니다.
⭐️ 기본적인
splice()
사용법
splice(시작 인덱스, 제거할 요소의 개수)
또는
splice(시작 인덱스, 제거할 요소의 개수, 추가할 요소)
Math.min()
의 결과값 즉 제일 작은 수의 인덱스를 indexOf()
로 찾고, 해당 인덱스를 시작으로 1개를 제거하면 시작 인덱스의 값만 제거가 됩니다. 마지막으로 제거된 배열을 리턴합니다.⭐️
splice()
는 원본 배열의 내용을 직접 변경합니다. 반면에 비슷하게 생긴slice()
는 원본 배열을 직접 변경하지 않고 복사본 배열을 반환합니다. 따라서splice()
를 사용할 경우 원본 배열을 반환하도록 합니다. 생김새가 비슷하지만 리턴값에서 차이가 나타나므로 사용할 때 주의합니다.
filter()
도 괜찮은 방법이지만, splice()
를 활용해볼 수 있는 문제였습니다.