프로그래밍/함수형 프로그래밍

[함수형 프로그래밍 연습하기] 프로그래머스 Level1 - 제일 작은 수 제거하기

mhko411 2021. 8. 8. 22:25
728x90

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

 

코딩테스트 연습 - 제일 작은 수 제거하기

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

programmers.co.kr


접근

먼저 배열 내에서 제일 작은 수를 찾는다. 이후 배열 내에서 제일 작은 수를 제거한 나머지의 수들을 반환하도록 한다.

반환된 배열이 비어있다면 -1을 추가하도록 하였다.

 

여기서 제일 작은 수를 제거하기 위해 filter 함수를 만들었는데 각 함수들은 한 개의 기능만 해야한다. 하지만 filter 함수에 배열이 비어있다면 -1을 추가하는 조건을 추가했었다가 삭제했다.

 

구현

- Math.min()은 숫자들을 전달하여 그 중 가장 작은 수를 반환한다.

- 제일 작은 수와 전달받은 arr 배열을 filter에 전달하여 제일 작은 수를 제외한 나머지 수를 배열에 추가하여 반환한다.

- 반환된 배열을 answer에 저장하고 answer가 비어있는지 검사하여 비어있다면 -1을 추가한다.

function filter(cmp, arr) {
    let result = [];
    for(let a of arr) {
        if(isEqual(cmp, a)) continue;
        result.push(a);
    }
    return result;
}

function isEqual(a, b) {
    return a === b;
}

function isEmpty(arr) {
    return arr.length === 0;
}
function solution(arr) {
    let answer = [];
    let minNumber = Math.min(...arr);
    answer = filter(minNumber, arr)
    if(isEmpty(answer)) answer.push(-1);
    return answer;
}