프로그래밍/함수형 프로그래밍
[함수형 프로그래밍 연습하기] 프로그래머스 Level1 - 나누어 떨어지는 숫자 배열
iwannawebfullstack
2021. 8. 9. 00:23
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;
}