본문 바로가기
개발/알고리즘

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

by ISA(류) 2021. 8. 20.

# 문제 원문

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]

# 문제 풀이

문제 자체는 간단하다. 그냥 입력 받은 배열 arr를 divisor로 나누어서 나머지가 없는 요소만 걸러내고, 정렬해서 반환 하는 단순한 문제. API중 filter를 이용해서 한번 순회해주면 된다. 무조건 기존에 입력된 arr를 한번 탐색해야하고 O(n) +

그후 남은 수들을 정렬 해야 하는 그런 방법 밖에 없나? 뭔가 다른 방법이 있다는 감각은 드는데 생각해도 딱히 답이 안나온다.

# 솔루션 플로우

1. 입력 받은 arr를 divisor로 나누었을때 나머지가 0인 수를 걸러낸다.

2. 그렇게 얻어진 result의 length가 0이면 -1 삽입 해주고  0이 아니라면 정렬 해준다.

3. result를 반환한다.

1. API를 활용한 풀이

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