array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요.divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -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] |
내 풀이
function solution(arr, divisor) {
var answer = [];
arr.map((num)=>{
num%divisor === 0 && answer.push(num)
})
answer.length===0 ? answer.push(-1) : answer.sort((a,b)=>(a-b)) ;
return answer
}
고민했던 점 & 배운 점
고민했던 부분 : [-1]을 반환하는 예외 처리하기
length 로 구별할 생각을 못하고 '나누어 떨어지는 수 vs 그렇지 않은 수' 삼항연산자로 접근했다.
function solution(arr, divisor) {
var answer = [];
arr.map((num) => {
num % divisor === 0 ? answer.push(num) : answer.push(-1)
});
return answer.sort((a, b) => a - b);
}
이렇게 하니
그러다가 마지막 테스트 결과가 빈 배열인 것을 발견하고, 배열의 길이가 뙇 눈에 들어왔다!
그리고 마음의 평화...내게 강같은 평화...🌿
배운 점
1. sort 함수는 정렬할 배열의 요소 개수가 2개 미만이면 ‘sort is not a function’ 오류가 난다.
2. push() 는 배열의 길이를 반환한다.
return answer.length===0 ? answer.push(-1) : answer.sort((a,b)=>(a-b)) ;
그룹스터디 팀원 코드 리뷰 이후 느낀 점
모두 비슷한 방식으로 풀었지만, 나누어 떨어지는 부분은 조금씩 달랐다.
filter, map, forEach 이 세방법이 나왔고,
시간복잡도, 공간복잡도 부분은 아직 모르기 때문에 이 부분은 고려하지 않고, 시각적으로 봤을 땐 filter 코드가 제일 깔끔한 것 같다.