ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • #AIL_23.12.05 // Programmers_제일 작은 수 제거하기
    AIL( Algorithm I Learned) 2023. 12. 6. 01:59

    ## AIL_ 제일 작은 수 제거하기

    *** 문제 설명
    정수를 저장한 배열, 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]

    ## solution.JavaScript

    1. 문제의 접근 방식

    주어진 코드는 배열에 최솟값을 찾아 제외한 새로운 배열을 생성하는 방식으로 문제를 해결해야 합니다. 


    2. 문제풀이

    function solution(arr) {
        if (arr.length <= 1) {
            return [-1];
        }
    
        // 배열에서 최솟값 찾기
        let min = arr[0];
        for (let i = 1; i < arr.length; i++) {
            if (arr[i] < min) {
                min = arr[i];
            }
        }
    
        // 최솟값을 제외한 새로운 배열 생성
        const result = [];
        for (let i = 0; i < arr.length; i++) {
            if (arr[i] !== min) {
                result.push(arr[i]);
            }
        }
    
        return result.length > 0 ? result : [-1];
    }
    /*
    테스트 1
    입력값 〉	[4, 3, 2, 1]
    기댓값 〉	[4, 3, 2]
    실행 결과 〉	테스트를 통과하였습니다.
    테스트 2
    입력값 〉	[10]
    기댓값 〉	[-1]
    실행 결과 〉	테스트를 통과하였습니다.
    */

     

    1. 처음 배경의 실이를 확인해서 길이가 `1` 이하인 경우에는 `-1`을 반환합니다. 

    if (arr.length <= 1) {
        return [-1];
    }

     

    2. 최솟값을 찾기위한 `for` 반복문을 사용합니다. 배열의 첫 번째 원소를 최솟값으로 초기화라고, 배열을 순회하면서 현재원소가 최솟값보다 작으면 최솟값을 갱신합니다. 

    let min = arr[0];
    for (let i = 1; i < arr.length; i++) {
        if (arr[i] < min) {
            min = arr[i];
        }
    }

     

    3. 최솟값을 제외한 새로운 배열을 생성합니다. 새로운 배열 `result`에는 최솟값과 같지 않은 모든 원소를 추가합니다.

    const result = [];
    for (let i = 0; i < arr.length; i++) {
        if (arr[i] !== min) {
            result.push(arr[i]);
        }
    }

     

    4. 최종적으로 새로운 배열을 반환하며, `result.length > 0` 통해 배열이 비어있지 않는지 확인하고, 새로운 배열이 빈 배열이라면 `-1`을 반환합니다. 

    return result.length > 0 ? result : [-1];

    3. 다른사람의 문제풀이 및 접근방식 분석(1)

     function solution(arr) {
         if (arr.length <= 1) {
             return [-1];
         }
    
         // 배열에서 최솟값 찾기
         const min = Math.min(...arr);
    
         // 최솟값을 제외한 새로운 배열 생성
         const result = arr.filter(num => num !== min);
    
         return result.length > 0 ? result : [-1];
     }
     /*
    테스트 1
    입력값 〉	[4, 3, 2, 1]
    기댓값 〉	[4, 3, 2]
    실행 결과 〉	테스트를 통과하였습니다.
    테스트 2
    입력값 〉	[10]
    기댓값 〉	[-1]
    실행 결과 〉	테스트를 통과하였습니다.
    */

     

    1. 배열의 길이 확인을 통해 주어진 배열의 길이가 `1` 이하인 경우, 바로 `-1`을 반환하여 예외 상황에 대한 예외처리를 진행합니다.

    if (arr.length <= 1) {
        return [-1];
    }

     

    2. `Math.min(...arr)`를 사용하여 배열 arr의 최솟값을 구합니다. Spread 연산자 `...`를 사용하여 배열의 각 요소를 개별적으로 전달하여 `Math.min` 함수에 입력합니다.

    const min = Math.min(...arr);

     

    3. `filter` 함수를 사용하여 배열에서 최솟값과 일치하지 않는 모든 요소를 새로운 배열 `result`로 만듭니다. `num !== min`은 최솟값과 같지 않은 요소만을 선택합니다.

    const result = arr.filter(num => num !== min);

     

    4. 최종적으로 result 배열의 길이를 확인하여, 길이가 `0`보다 크면 `result`를 반환합니다. 그렇지 않으면 배열에  `-1`을 담아 반환합니다.

    return result.length > 0 ? result : [-1];

    4. 다른사람의 문제풀이 및 접근방식 분석(2)

    function solution(arr) {
        const min = Math.min(...arr);
        return arr.length !== 1 ? arr.filter(i => i !== min) : [-1]
    }
    /*
     /*
    테스트 1
    입력값 〉	[4, 3, 2, 1]
    기댓값 〉	[4, 3, 2]
    실행 결과 〉	테스트를 통과하였습니다.
    테스트 2
    입력값 〉	[10]
    기댓값 〉	[-1]
    실행 결과 〉	테스트를 통과하였습니다.
    */
    */

     

    1. `Math.min(...arr)`를 사용하여 배열 arr의 최솟값을 구합니다. Spread 연산자 `...`를 사용하여 배열의 각 요소를 개별적으로 전달하여 `Math.min` 함수에 입력합니다.

    const min = Math.min(...arr);

     

    2. 배열 arr의 길이가 `1`인 경우에는 배열에 `-1`을 담아 반환합니다. 그 외의 경우에는 arr에서 최솟값을 제외한 배열을 반환합니다. `arr.filter(i => i !== min)`을 사용하여 최솟값과 같지 않은 요소만 선택합니다.

    return arr.length !== 1 ? arr.filter(i => i !== min) : [-1];

     


    #  Math.min 함수

    1. 정의 

    `Math.min` 함수는 주어진 숫자 중 가장 작은 값을 반환하는 JavaScript의 내장 함수입니다.

    2. 사용 방법 

    const minValue = Math.min(1, 2, 3, 4, 5);
    // minValue에는 1이 저장됨

     

    `Math.min` 함수는 인자로 전달된 숫자 중에서 가장 작은 값을 반환합니다. 인자는 하나 이상일 수 있으며, Spread 연산자를 사용하여 배열의 요소로도 전달할 수 있습니다.

    3. 장단점 

    ** 장점

    간편하고 직관적인 사용 방법으로 최솟값을 쉽게 구할 수 있습니다. 숫자의 개수에 제한 없이 동작하며, 배열의 최솟값을 찾을 때 유용하게 사용됩니다.

     

    ** 단점

    배열을 인자로 직접 받지 않고, 숫자로만 받기 때문에 배열의 요소를 개별적으로 전달해야 합니다. 배열이 비어있는 경우 Infinity를 반환하므로 예외 처리가 필요할 수 있습니다.


    # filter 메서드

    1. 정의 

    filter 메서드는 주어진 함수의 조건에 맞는 요소만을 추출하여 새로운 배열을 생성하는 JavaScript의 배열 메서드입니다.

    2. 사용 방법

    const arr = [1, 2, 3, 4, 5];
    const newArr = arr.filter(num => num > 2);
    // newArr에는 [3, 4, 5]가 저장됨

    3. 장단점 

    ** 장점

    조건에 맞는 요소를 선택하여 새로운 배열을 생성하는 간편하고 유용한 방법입니다. 함수를 통한 조건 정의가 자유롭고, 복잡한 조건도 다룰 수 있습니다.

     

    ** 단점

    기존 배열을 변경하지 않고 새로운 배열을 반환하는 특성상, 메모리 사용 측면에서 조금 더 많은 리소스가 소비될 수 있습니다. 콜백 함수가 호출되는 횟수에 따라 성능이 영향을 받을 수 있습니다.


    # Math.min 함수/ filter 메서드 사용 시 주의사항

    ** Math.min 함수

    숫자를 개별적으로 전달하거나 배열을 Spread 연산자로 전달해야 합니다. 배열이 비어있는 경우 Infinity를 반환하므로 예외 처리가 필요합니다.

    ** filter 메서드

    조건 함수는 부작용이 없도록 작성하는 것이 좋습니다. (즉, 함수 내에서 외부 변수 변경이나 다른 상태 변경을 피해야 함) filter 메서드의 사용은 새로운 배열을 생성하므로, 원본 배열을 변경하지 않는다는 점을 유의해야 합니다.

Designed by Tistory.