리코딩 : 알고리즘

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

BreezeBm 2021. 9. 16. 10:45

1. 문제

문제 설명

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

제한사항

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

입출력 예

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

2. 나의 풀이

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

 최근에 배열 메서드를 활용한 것들이 떠올라서 활용을 해보았다. 반환될 때, 정렬이 되야 하기 때문에 먼저 정렬을 진행했고, divisor로 나누었을 때, 나머지가 0인 값들만 answer로 할당해 주었다. 하지만 입출력 예시의 마지막 divisor가 10인 경우에는 빈배열이 들어가게 되는데, 빈배열 일때만, -1이라는 값을 넣어서 반환해 주었다. 나름 메서드를 이제 활용해보려고 시도했다는 것에 만족을 느꼈지만 다른분의 풀이를 보고 또 배우게 되었다.

 

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

 조건부 처리를 위해서 ?를 사용한 모습을 보고, 또 새롭게 적용해 볼 수 있는 문제가 있을 것 같아서 많은 것을 느낄 수 있었다...

 공부..공부...