찰리의 이야기

Javascript 제일 작은 수 제거하기 본문

찰리: 코딩 연습

Javascript 제일 작은 수 제거하기

쨜리 2021. 9. 12. 00:17
반응형

Javascript 제일 작은 수 제거하기

 

 

문제 : 정수를 저장한 배열, 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) {
    var answer = [];
    return answer;
}

먼저 생각한 것은

가장 작은 수를 찾는 것이 우선이라는 것 이었습니다.

그리고 배열을 탐색하면서 없애버리겠다고 생각했습니다.

만약에 해당 요소가 하나뿐이라면 indexof()를 사용해서

splice()로 한방에 없애버릴텐데,

1개 이상이라면,

어쩔 수 없이 배열을 탐색하면서 없애버려야 할 것입니다.

 

function solution(arr) {
    let lowestNum = [];
    
    for(let i=0; i<arr.length; i++){
        if(i === 0){
            lowestNum.push(arr[i]);
        }else{
            if(lowestNum[0] > arr[i]){
                lowestNum[0] = arr[i];
            }
        }
    }
    
    for(let j=0; j<arr.length; j++){
        if(arr[j] === lowestNum[0]){
            arr.splice(j, 1);
        }
    }
    
    if(arr.length === 0){
        arr.push(-1);
        return arr;
    }else{
        return arr;   
    }
}

가장 작은 수를 찾고,

그 수에 해당하는 요소를 제거하는 방식입니다.

 

여기까지가 제 풀이 방법이고,

다른 풀이법을 찾아보았습니다.

 

function solution(arr) {
    if (arr.length > 1) {
        var minNum = Math.min(...arr);
        var idx = arr.indexOf(minNum);
        arr.splice(idx, 1);
    } else {
        arr = [-1];
    }
    return arr;
}

배열에서 제일 작은 수를 찾을때 

Math.min(...arr) 으로 간단히 찾을 수 있다.

아 놀라워라.

Spread Operator 사용하는 것에 익숙해지자.

전개연산자는 객체나 배열의 원소를 하나씩 꺼내어 펼쳐서 리턴하기 때문에

이렇게 간단히 사용할 수 있는 것이다.

 

다른 방법으로는 

function solution(arr) {
    if (arr.length === 1 ) {
        return [-1]
    }
    const minValue = Math.min.apply(null, arr)
    const index = arr.findIndex(value => value === minValue)
    arr.splice(index, 1)
    return arr
}

이렇게 function.apply(null, arr) 을 이용하는 방법이 있었다.

javascript 에서 함수를 호출하는 방법중 apply를 이용하면 

두번째 파라미터로 배열을 전달해주면 되기 때문에

해당 문제에서 배열로 Math.min을 적용해줄 수 있었다.

 

이 두 방법중 앞의 전재연산자가 더욱 간단 명료한 것 같다.

전개 연산자를 잘 숙지해두자!

 

 

 

 

Javascript 제일 작은 수 제거하기

반응형
Comments