프로그래머스) 나누어 떨어지는 숫자 배열

minji jeon·2022년 7월 17일
0

알고리즘

목록 보기
6/29
post-thumbnail

1. 문제

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

2. 접근

우선 나누어 떨어져야 한다고 해서
나머지는 0이어야 하는군 이라고 생각을 했다.
그리고 배열의 값만 걸러야 하는데 그걸 가능하게 하는 함수가 뭐가있을까 검색하가 filter함수와 find함수를 알게되었다.

filter 함수는 조건에 맞는 모든 요소를 모아 새로운 배열로 반환한다
find함수는 조건을 만족하는 첫 번째 요소의 값을 반환합니다. 그런 요소가 없다면 undefined를 반환한다.

3. 내답

첫번째 시도는 find함수 --->실패
왜냐면 find함수는 첫번째 값만 반환한다는 사실을 간과한 것이다.

function solution(arr, divisor) {
    var result = [];

result.push(arr.find(element => element % divisor === 0 ));
    return result } 

arr배열의 모든 요소에서 나누어 떨어지는 값을 새로운 배열에 push하도록 하였으나,,
첫번째 값만 반환하기 때문에 무조건 1개의 값밖에 나오지 않는다.

두번째 시도 filter함수

function solution(arr, divisor) {
   const result = arr.filter(word => word % divisor === 0 ); 
    return result.length == 0 ? [-1] : result.sort((a,b) => a-b);  
   }

우선 filter함수를 이용하여 첫번째 조건인 나누어떨어지는 배열을 걸렀다.
그리고 삼항연산자를 사용하여 값이 없을경우 즉 배열의 길이가0일경우 -1을 출력, 조값이 있을 경우 오름차순으로 출력되도록 하였다.

남의 답

가장 쉽게 생각할수 있는 답이라고 생각한다.

function solution(arr, divisor) {
    let answer = [];
    
    for (let i = 0; i < arr.length; i++) { 
        if (arr[i] % divisor === 0) {  
            answer.push(arr[i]); 
    }
    
    answer.sort((a, b) => a - b); 
    
    if (answer.length === 0) {
        answer.push(-1); 
    }   

    return answer;
}

매개변수 arr의 length 값만큼 for 반복문을 사용
arr[i] 를 divisor 로 나누고 나머지가 0이 되는 요소들을
answer 변수에 push(); 를 사용하여 넣어줌.
그 후 answer를 sort() 메소드를 이용하여 오름차순 정렬.
answer.length 값이 0 일때는 answer 에 -1를 push()divisor로 나누어 떨어지는 요소가 하나도 없다면 -1 를 리턴해주어야 하기 때문이다.

profile
은행을 뛰쳐나와 Deep Dive in javascript

0개의 댓글