본문 바로가기
알고리즘/프로그래머스

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

by gardenii 2023. 6. 18.

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

https://school.programmers.co.kr/learn/courses/30/lessons/12910

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

1. forEach() 사용 풀이

function solution(arr, divisor) {
    let answer = [];
    arr.forEach((e) => {
      if (e % divisor === 0) answer.push(e);
    });
    answer.length === 0 ? answer.push(-1) : answer.sort((a, b) => a - b);
    return answer;
  }

코드 해설

- 정답을 담아줄 빈 배열 answer를 선언해줍니다.

- 자연수가 담긴 arr의 요소를 forEach()를 통해 하나씩 순회하며, 현재 처리 중인 요소를 뜻하는 인자 e를 divisor로 나누어 나머지가 0인 경우 answer에 값을 넣어줍니다.

- 삼항연산자를 통해 forEach()문 종료 후 만약 나누어 떨어지는 수가 없어 배열이 비어있으면(배열 길이가 0이면) answer에 -1 을 넣어주고, 값이 있으면 answer 배열을 sort() 메서드의 비교 함수로 a - b 를 넣어주어 오름차순으로 정렬해줍니다.

 

- sort() 메서드는 배열을 문자열로 변환한 후 유니코드 코드 포인트 순서로 정렬하므로 숫자 정렬이나 사용자 지정 정렬 순서와는 다를 수 있습니다. 

- 따라서 숫자 배열을 올바르게 정렬하기 위해서는 정렬 순서를 지정하는 비교 함수를 제공해야 합니다.

- 보통 오름차순 정렬 시에는 비교 함수로 a-b, 내림차순 정렬 시에는 b-a를 넣어줍니다.

 

* 더 자세한 내용은 sort() 관련 글로 첨부 예정 *

2. filter() 사용 풀이

function solution(arr, divisor) {
    let answer = []
    arr.sort((a,b)=>(a-b))
    answer = arr.filter(e=> e % divisor === 0)
    if (answer.length === 0) {
        answer.push(-1);
    } 
    return answer;
}

코드 해설

- 정답을 담아줄 빈 배열 answer를 선언해줍니다.

- sort() 메서드의 비교 함수로 a - b 를 넣어주어 arr를 오름차순으로 정렬해줍니다.

- filter() 메서드를 통해 divisor로 나누어 나머지가 0인 요소들을 answer에 넣어줍니다.

* filter 관련 글 첨부 예정 *

- 앞서 정렬한 후 배열을 생성하였기 때문에 배열 길이가 0인지 아닌지만 판별하여, 0일때 answer배열에 -1값을 넣어 리턴해줍니다.