JS Coding Test-나누어 떨어지는 숫자 배열


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

[제한사항]

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

[입출력 예 설명]

  • 입출력 예#1 arr의 원소 중 5로 나누어 떨어지는 원소는 5와 10입니다. 따라서 [5, 10]을 리턴합니다.

  • 입출력 예#2 arr의 모든 원소는 1으로 나누어 떨어집니다. 원소를 오름차순으로 정렬해 [1, 2, 3, 36]을 리턴합니다.

  • 입출력 예#3 3, 2, 6은 10으로 나누어 떨어지지 않습니다. 나누어 떨어지는 원소가 없으므로 [-1]을 리턴합니다.

Pseudo Code

- 배열에서 나머지가 0 요소 구해서 넣어주기
for 배열 arr의 i번째 요소를 변수 divisor로 나누어 나머지(%) if 나머지가 0이라면 배열 answer에 i번째 요소를 psuh.

- 오름차순 정렬
answer 배열을 sort 해준다.
주의! 단순한 sort 함수로는 유니코드 순서로 정렬되니 다른 sort 함수를 사용해주어야한다. (ex. 단순 sort 정렬시 10보다 2 뒤에 나온다.)

- 나머지가 0 요소가 없는 경우
 for & if 문을 통과하지 못한 요소는 배열 answer에 없기 때문에 answer의 length가 0 경우 answer은 [-1]

Answer

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=[-1];

    return answer
}

Other Answers

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];
}

Study

sort()

arr.sort([compareFunction])

[compareFunction]

  • 이 부분이 생략되면 배열의 element들은 string으로 취급되어 유니코드 순서대로 정렬된다.
const arr = [2, 1, 3, 10, 200];

arr.sort(); // [1, 10, 2, 200, 3]
  • 이 함수는 두 개의 배열 element를 파라미터로 입력. 예를들어 a, b 두개의 element를 파라미터로 입력받을 경우,

이 함수가 리턴하는 값이 0보다 작을 경우, a가 b보다 앞에 오도록 정렬하고, 만약 0을 리턴하면, a와 b의 순서를 변경하지 않는다.

const arr = [2, 1, 3, 10, 200];

arr.sort(function(a, b){
  if(a > b) return 1;
  if(a === b) return 0;
  if(a < b) return -1;
}); 

// [1, 2, 3, 10, 200]

위 코드를 다음과 같이 단순화 할 수 있다.

arr.sort(function(a, b){return a - b;});
// [1, 2, 3, 10, 200]

- 화살표 함수 사용
arr.sort((a,b)=>a-b);
// [1, 2, 3, 10, 200]
  • 오름차 순 정렬(Number)
arr.sort(function(a, b){return a - b;});
// [1, 2, 3, 10, 200]
  • 내림차 순 정렬(Number)
arr.sort(function(a, b){return b - a;});
// [200, 10, 3, 2, 1]





© 2020.11. by creamer

Powered by CREAMer