-
항해 99 - 나누어 떨어지는 숫자 배열알고리즘 공부/JavaScript 문제 2023. 4. 16. 16:02
[ 문제 ]
array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수,
solution을 작성해주세요.
divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.
- arr은 자연수를 담은 배열입니다.
- 정수 i, j에 대해 i ≠ j 이면 arr[i] ≠ arr[j] 입니다.
- divisor는 자연수입니다.
- array는 길이 1 이상인 배열입니다.
[ Input / Output 예시 ]
arr divisor Output [5, 9, 7, 10] 5 [5, 10] [2, 36, 1, 3] 1 [2, 36, 1, 3] [3, 2, 6] 10 [-1]
[ 풀이 ]
for문을 쓸까? forEach를 쓸까? 고민하다가 filter 메소드가 생각나서 바로 메소드로 넘어갔다.
각 원소를 divisor로 나눠서 나머지가 0인 값만 filter를 사용해서 남긴다.
남은 결과를 가지고 오름차순 정리를 해야하기 때문에 sort() 를 사용했는데. [5, 10]은 [10, 5]로 반환되었다.
엥? 무슨 일이지? 해서 찾아보니 sort()는 문자열로 인식해서 정렬해주기 때문이었다.
그래서 compareFunction을 넣어줬다. 다양한 메소드를 다양한 방법으로 활용해봐야겠다는 생각이 들었다.
[ 코드 ]
// filter 사용 // filter 메소드는 배열의 원소 중 해당 조건에 맞는 원소만 남겨주므로 나누어 떨어지는 숫자만 남긴다. // sort 메소드는 유니코드를 통해 크기 비교를 하므로 숫자 비교를 하고싶다면 compareFunction을 넣어야 한다. const solution1 = function (arr, divisor) { // filter 메소드를 사용하여 나누어 떨어지는 숫자를 찾고 sort 메소드를 사용해서 배열 const result = arr.filter((a) => a%divisor===0).sort((a, b) => a-b) // result 길이가 0보다 크면 result를 0이면 [-1]을 반환 return (result.length > 0) ? result : [-1]; } console.log(solution1([5, 9, 7, 10], 5)) console.log(solution1([2, 36, 1, 3], 1))
'알고리즘 공부 > JavaScript 문제' 카테고리의 다른 글
항해 99 - 문자열 내 p와 y의 개수 (0) 2023.04.16 항해 99 - 내적 (0) 2023.04.16 항해 99 - 2016년 (0) 2023.04.16 항해 99 - 부족한 금액 계산하기 (0) 2023.04.16 항해 99 - x만큼 간격이 있는 n개의 숫자 (1) 2023.04.16