5월 20일 제일 작은 수 제거

이정민·2022년 5월 20일
0

알고리즘

목록 보기
8/23

제일 작은 수 제거하기

출처: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] 입니다.

입출력
arrreturn
[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) 이렇게 작성해서 아는 부분에서 해결할 수 있었는데 스프레드를 생각하지 못해서 아쉽다...

0개의 댓글