코딩테스트 | (JavaScript) 프로그래머스 : 나누어 떨어지는 숫자 배열

trevor1107·2021년 8월 24일
0

✅문제

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

❕ 제한사항

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

🎹📢입출력 예제

✍풀어보기

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

첨에 map으로 하려고 하다가 filter함수가 생각나서 바로 바꿔서 풀었다! 아 그리고 이번에 알게 된 점은 sort() 함수는 기본적으로 오름차순으로 하는 줄 알았는데, 첫번째 케이스에서 결과가 [10, 5]로 되길래 찾아보니깐 숫자라도 문자로 변환되고 유니코드 포인트 값에 의해서 정렬된다.
예를들어 [5, 33, 17, 1000].sort()의 결과는 [1000, 17, 5, 33]이다. 이거 잘못하다가 원하지 않는 결과를 초래할 수 있겠다. 발견하길 잘했다는 생각이 든다!
숫자를 정렬하고 싶다면 정렬 옵션으로 콜백 함수를 넣어 주어야 한다!


🎈다른 사람의 풀이

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

// 또 다른 풀이
function solution(arr, divisor) {
    var answer = [];
    arr.map((o) => {
        o % divisor === 0 && answer.push(o);
    })
    return answer.length ? answer.sort((a, b) => a - b) : [-1];

}

첫 번째는 내가 푼 방법과 똑같았다. 다만 코드가 옆으로 길지 않아서 더 깔끔해보인다.
두 번째는 내가 처음에 생각했던 방법과 비슷하게 푼 것 같다.
약간의 차이점이라면 o % divisor === 0 && answer.push(o); 부분에서 AND 연산자(&&)를 이용해서 배열에 넣어준 부분! 굿굿굿~



참고 자료 및 사이트 (감사합니다)

profile
프론트엔드 개발자

0개의 댓글