프로그래머스)제일 작은 수 제거하기

minji jeon·2022년 7월 18일
0

알고리즘

목록 보기
22/29
post-thumbnail

1. 문제

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

2. 접근

우선 처음에는 가장 작은수를 제거해야 하니
오름차순으로 정렬을 해야겠구나! 라고 생각했다.
정렬한 뒤에 제일 작은 수는 어떻게 자르지? 했는데
그럼 배열의 인덱스넘버를 알수있으니 indexof를 사용하거나 배열의 맨뒤를 삭제하는 pop함수를 사용해야지 했는데 이 방법으로는 해결을 못했다. 우선 sort함수로 오름차순으로 정리를 해버리면 기존 배열이 완전히 틀어지게 되기 때문이다.

그래서 배열의 최솟값을 찾는 함수 math.min()을 찾아내었고,
최솟값을 찾으면 그 값만 어떻게 자르지 해서 검색한 결과
특정값을 삭제하는 방법이 아주 다양함을 알게되었다.
https://developer-talk.tistory.com/153
이곳에 잘 정리되어 있다.
여기서 특정값만 뺄수 있는 filter함수를 알게되었다.

3. 내답

 function solution(arr) {
            let result = arr.filter((e)=>{ 
             return e > Math.min(...arr)     // 스프레드 문법사용. 최소값보다 큰 값을 빼고 새로운 배열로 반환 const arrS = [...arr, 5, 6];
            })                                 //
            return arr.length === 1 ? [-1]: result ; 
        }

필터함수는 조건에 맞는 값을 새로운 배열로 반환해준다.
최솟값보다 큰 숫자들만 반환되도록하였다.
filter함수는 새로운 함수를 반환해 주기 때문에 result라고 변수를 설정해주었다.
그리고 길이가 만약1이라면 -1이 출력되도록 하였다.

근데 여기서 math.min()에 스프레드 문법을 사용한다.
그이유는 math.min함수는 배열에는 사용이 안되기 때문이다. 배열을 집어넣을 경우 NaN을 반환한다.

mdn: 주어진 숫자들 중 가장 작은 값. 만약 적어도 1개 이상의 인자값이 숫자형으로 변환이 불가능 한 경우 이 함수는 NaN 를 반환 합니다.

만약 filter함수 말고 다른걸 쓴다면
min으로 최솟값을 찾은뒤, indexof로 해당 값의 인덱스를 찾고, splice함수로 그 배열의 해당인덱를 지울 수 있다.

profile
은행을 뛰쳐나와 Deep Dive in javascript

0개의 댓글