JavaScript_20.제일 작은 수 제거하기

hams·2023년 3월 29일
0

algorithm

목록 보기
20/62

Q.
정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.


나의코드

function solution(arr) {
    return arr.length >= 2 
    ? arr.filter(e => e !== Math.min(...arr)) 
    : [-1]
}

단순히 배열에서 가장 작은 값(Math.min)을 제거하고
filter를 써서 거르기,,
근데 여기서 테스트 케이스 2가 시간이 엄청 오래 걸린다
효율적인 코드는 아닌듯...

다른 사람의 코드

function solution(arr) {
    arr.splice(arr.indexOf(Math.min(...arr)),1);
    if(arr.length<1)return[-1];
    return arr;
}

splice를 통해 배열의 가장 작은 값의 index를 구하여 하나를 제거해준다
arr.indexOf(Math.min(...arr)
이 부분에서 만약 배열의 길이가 하나라면
Math.min() 가장 작은 값의 인덱스가 0이 될테고
arr.indexOf()를 해서 나오는 결과 값이 0이 될 것이다.

그럼,arr.splice(0,1) 배열 안의 모든 값을 삭제해서 빈 배열만 남게 된다.

- Splice()란?

var myFish = ['angel', 'clown', 'mandarin', 'sturgeon'];
var removed = myFish.splice(2, 0, 'drum');

// myFish is ["angel", "clown", "drum", "mandarin", "sturgeon"]
// removed is [], no elements removed

splice()는 배열의 값을 바꿔서 새로운 배열을 반환해준다

첫번째 인자로는 바꿀 위치의 index값
두번째 인자로는 (마이너스 개념)바꿀 위치부터 몇개를 바꿀건지?
세번째 인자로는 배열에 추가할 요소

+indexOf는 일치하는 값이 있으면 그거 반환하고 아님 -1반환,,

0개의 댓글