출처:https://programmers.co.kr/learn/courses/30/lessons/12935
문제 설명
정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.
제한 조건
arr은 길이 1 이상인 배열입니다.
인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다.
입출력 | 예 |
---|---|
arr | return |
[4,3,2,1] | [4,3,2] |
[10] | [-1] |
나의 풀이법
function solution(arr) {
let min = Math.min.apply(null,arr)
let newArr=[]
if (arr.length < 2){
return [-1]
}
else {
for(let i =0; i< arr.length; i++){
if (arr[i]!== min){
newArr.push(arr[i])
}
}
return newArr
}
}
일단 최소값을 Math.min으로 구하는데 Math.min은 기본적으로 parameter에 array가 들어올 수 없으므로 array를 적용할 수 있도록 바꿔줘야한다.
그래서 Function.prototype.apply()을 사용하여 array에서도 사용할 수 있게 만들었다.
var numbers = [5, 6, 2, 3, 7];
var max = Math.max.apply(null, numbers);
위의 코드는 Math.max(5, 6, 2, 3, 7)과 같다고 말할 수 있다.
참고 주소:
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Function/apply
그 다음으로 arr의 길이가 1또는 0일 경우 [-1]을 리턴하게 만들었고 그 이외의 조건에서는 배열을 for문을 통해 순회하여 arr[i]가 Min과 일치하지 않는 경우 빈배열에 그 값을 푸시하여 그 배열을 return하는 방향으로 해결방향을 진행하였다.
수정하고 싶은 부분을 꼽자면
let min = Math.min.apply(null,arr)을 사용하지 않고 spread를 사용하여 let min = Math.min(...arr) 이렇게 작성해서 아는 부분에서 해결할 수 있었는데 스프레드를 생각하지 못해서 아쉽다...