알고리즘

제일 작은 수 제거하기

choijming21 2024. 8. 26. 10:48

Q.  정수를 저장한 배열, 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) {
   if(arr.length <= 1) return [-1];
    
    const min = Math.min(...arr);
    
    const newArr = arr.filter((num) => num !== min );
    
    return newArr;
}

 

함수의 동작 방식:

  1. 먼저 배열의 길이가 1 이하인지 확인하고 만약 1 이하라면 [-1]을 반환한다.
  2. Math.min(...arr)를 사용해 배열에서 가장 작은 수를 찾는다.
  3. filter() 메소드를 사용해 최솟값과 같지 않은 모든 요소를 새 배열로 만든다. 이렇게 하면 가장 작은 수가 정확히 제거된다.
  4. 필터링 된 새 배열을 리턴한다.

 

 

 

< 다른 사람의 풀이 >

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

 

함수의 동작 방식:

  1. 먼저 배열의 길이가 1 이하인지 확인하고, 1 이하라면 [-1]을 반환한다.
  2. minIndex를 0으로 초기화하여 최소값의 인덱스를 저장할 준비를 한다.
  3. for문을 사용해 배열을 순회하면서 가장 작은 요소의 인덱스를 찾는다. 현재 요소가 minIndex에 있는 요소보다 작다면, minIndex를 현재 인덱스로 업데이트 한다.
  4. 반복문이 끝나면 minIndex에는 배열에서 가장 작은 요소의 인덱스가 저장된다.
  5. splice() 메소드를 사용하여 minIndex 위치의 요소를 제거한다. 이 메소드는 원본 배열을 직접 수정한다.
  6. 수정된 배열을 리턴한다. 이 배열은 원래 배열에서 가장 작은 요소가 제거된 상태이다.