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

[함수형 프로그래밍 연습하기] 프로그래머스 Level1 - 나누어 떨어지는 숫자 배열

mhko411 2021. 8. 9. 00:23
728x90

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

 

코딩테스트 연습 - 나누어 떨어지는 숫자 배열

array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요. divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하

programmers.co.kr


접근

배열 내의 숫자 중 divisor로 나누어서 떨어지는 숫자를 새로운 배열에 저장하도록 하였다.

이후 배열이 비어있을 때는 -1을 추가하고 오름차순으로 정렬한다.

 

구현

- 먼저 map 함수를 통해 숫자들을 하나씩 filter로 전달할 수 있도록한다.

- 해당 수가 나누어 떨어지는지 isPossible로 검사하여 나누어 떨어진다면 해당 숫자를 result에 추가한다.

- filter에 의해 반환된 배열이 isEmpty()로 검사하여 비어있다면 -1을 추가한다.

- 이후 오름차순으로 정렬한다.

function* map(numbers) {
    for(let number of numbers) yield number;
}

function filter(divisor, numbers) {
    let result = [];
    for(let number of numbers) {
        if(isPossible(number, divisor)) result.push(number);
    }
    return result;
}

function isPossible(a, b) {
    return a >= b && (a % b === 0);
}

function isEmpty(iter) {
    return iter.length === 0;
}
function solution(arr, divisor) {
    let answer = [];
    
    answer = filter(divisor, map(arr));
    if(isEmpty(answer)) answer.push(-1);
    answer.sort((a, b) => a - b);
    return answer;
}