ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 항해 99 - 나누어 떨어지는 숫자 배열
    알고리즘 공부/JavaScript 문제 2023. 4. 16. 16:02

    [ 문제 ]

    array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, 

    solution을 작성해주세요.

    divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.

    • arr은 자연수를 담은 배열입니다.
    • 정수 i, j에 대해 i ≠ j 이면 arr[i] ≠ arr[j] 입니다.
    • divisor는 자연수입니다.
    • array는 길이 1 이상인 배열입니다.

     

    [ Input / Output 예시 ]

    arr divisor Output
    [5, 9, 7, 10] 5 [5, 10]
    [2, 36, 1, 3] 1 [2, 36, 1, 3]
    [3, 2, 6] 10 [-1]

     


    [ 풀이 ]

    for문을 쓸까? forEach를 쓸까? 고민하다가 filter 메소드가 생각나서 바로 메소드로 넘어갔다.

    각 원소를 divisor로 나눠서 나머지가 0인 값만 filter를 사용해서 남긴다.

    남은 결과를 가지고 오름차순 정리를 해야하기 때문에 sort() 를 사용했는데. [5, 10]은 [10, 5]로 반환되었다.

     

    엥? 무슨 일이지? 해서 찾아보니 sort()는 문자열로 인식해서 정렬해주기 때문이었다.

    그래서 compareFunction을 넣어줬다. 다양한 메소드를 다양한 방법으로 활용해봐야겠다는 생각이 들었다.

     

    [ 코드 ]

    // filter 사용
    // filter 메소드는 배열의 원소 중 해당 조건에 맞는 원소만 남겨주므로 나누어 떨어지는 숫자만 남긴다.
    // sort 메소드는 유니코드를 통해 크기 비교를 하므로 숫자 비교를 하고싶다면 compareFunction을 넣어야 한다.
    const solution1 = function (arr, divisor) {
        // filter 메소드를 사용하여 나누어 떨어지는 숫자를 찾고 sort 메소드를 사용해서 배열
        const result = arr.filter((a) => a%divisor===0).sort((a, b) => a-b)
    
        // result 길이가 0보다 크면 result를 0이면 [-1]을 반환
        return (result.length > 0) ? result : [-1];
    }
    
    console.log(solution1([5, 9, 7, 10], 5))
    console.log(solution1([2, 36, 1, 3], 1))

    댓글

Designed by Tistory.