본문 바로가기
내일배움 과제/기타 과제

알고리즘 29번 - 제일 작은 수 제거하기

by GREEN나무 2024. 12. 6.
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/12935

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

 

JS

문제

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

제한 조건
arr은 길이 1 이상인 배열입니다.
인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다.

 


계획

배열의 길이가 1 이하면 -1 반환

 

Math.min, findIndex 써서 최소값 찾아 제거하고 배열 반환하기

 


참고, 풀이

return arr.splice(arr.findIndex(Math.min(...arr)),1)

에러.

 

findIndex 사용방법이 틀렸음

let index = arr.findIndex(num => num > 25);

 

-1이 아니라 [-1]을 반환해야

성공

let arr = [5, 10, 33, 234, 66];
let arr1 = [55];

function solution(arr) {
    if (arr.length <= 1) {
        return [-1];
    } else {
        let minA = Math.min(...arr);
        let indexA = arr.findIndex((i) => i === minA);
        arr.splice(indexA, 1);
        return arr;
    }
}

console.log(solution(arr));

 

이제 줄이기

function solution(arr) {
    if (arr.length <= 1) {
        return [-1];
    } else {
        return arr.splice(arr.findIndex((i) => i === Math.min(...arr)),1);
    }
}

실패

arr.splice()는 삭제된 값을 반환하므로, 수정된 배열을 반환하려면 arr 자체를 반환해야 합니다.

 

 

... 줄이긴 줄였는데 뭔가 많이 잘못된듯

function solution(arr) {
    if (arr.length <= 1) {
        return [-1];
    } else {
        arr.splice(
            arr.findIndex((i) => i === Math.min(...arr)),
            1
        );
        return arr;
    }
}

시간 복잡도가 O(n^2) (최악의 경우)나옴... filter쓰는게 시간복잡도 적게 나옴


function solution(arr) {
    if (arr.length <= 1) {
        return [-1];
    } else {
        let minA = Math.min(...arr);
        let filterA = arr.filter((i) => i !== minA);
        return filterA;
    }
}

코드 간략화하기

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

    const min = Math.min(...arr); // 최소값 찾기 (O(n))
    return arr.filter((num) => num !== min); // 새로운 배열 생성 (O(n))
}

 


참고

배열에서 원하는 인덱스 삭제: https://devbirdfeet.tistory.com/218