프로그래머스 | 나누어 떨어지는 숫자 배열
나누어 떨어지는 숫자 배열
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] |
내 풀이
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
}
- 정답을 넣을 빈 배열을 만든다.
- map 함수를 이용해 arr 요소를 divisor로 나누어 떨어지는 요소들만 빈배열에 push 한다.
- 나누어 떨어지지 않은 수는 answer.length 를 이용해 length가 0 (빈배열)이면 -1을 push 한다.
- 그렇지 않으면 (나누어 떨어지는 요소들은), sort 함수를 이용해 정렬한다.
- 여기서 sort 함수는 문자열의 유니코드로 정렬하기 때문에 36을 3으로 인식한다.
따라서 (a,b)=>(a-b) 콜백함수를 인자로 넣어서 커스컴하여 오름차순 정렬한다. - answer 을 return 한다.
고민했던 점 & 배운 점
고민했던 부분 : [-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로 push 되니까[-1,-1,-1] 이 return 되고...🤦
- 그럼 if, else 말고 ture 만 반환하는게 좋겠군.. 까지는 바로 알았다....
- 그럼 -1은 어떻게 반환하지...?😵💫
map 함수 밖에서 얼리 리턴을 해야하나? 아니 그럼 배열을 다 못돌잖아...??
이러다가 filter 쓰고 삼항연산자 썼다가 map밖에서 for 돌렸다가 아주 삽질을 했더랬다...ㅎ
그러다가 마지막 테스트 결과가 빈 배열인 것을 발견하고, 배열의 길이가 뙇 눈에 들어왔다!
그리고 마음의 평화...내게 강같은 평화...🌿
배운 점
- sort 함수는 정렬할 배열의 요소 개수가 2개 미만이면 ‘sort is not a function’ 오류가 난다.
- push() 는 배열의 길이를 반환한다.
return answer.length===0 ? answer.push(-1) : answer.sort((a,b)=>(a-b)) ;
- answer.push(-1) 하면 1이 나옴.
arr를 return 해야하는 건 알았는데...대체 왜 1이지?
음수를 인식 못하나? 왜 하필 1이지? 콘솔에 3 넣어보고 -8 넣어보니 1씩 늘어나는게 length 같았다. - push() 함수를 구글링 해보니 역시나 length를 반환한단다...ㅎ
이것도 몰랐던 나란 빠가사리... 반성하자...이제라도 알았으면 됐다....ㅋ
그룹스터디 팀원 코드 리뷰 이후 느낀 점
4/22 예정
Author And Source
이 문제에 관하여(프로그래머스 | 나누어 떨어지는 숫자 배열), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@imzzuu/프로그래머스-나누어-떨어지는-숫자-배열저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)