문제는 제목 그대로다. 자세한 문제 출처는 아래와 같다.
https://school.programmers.co.kr/learn/courses/30/lessons/12910
일단 나의 코드는 아래와 같았다.
function solution(arr, divisor) {
var answer = [];
arr.map((element) => {
if(element % divisor === 0) {
answer.push(element)
}
})
if(answer.length===0) {
answer.push(-1)
}
answer.sort((a,b) => a-b)
return answer;
}
복잡하다.
그리고 모범답안? 을 보고 내가 쳐본 코드는 아래와 같다.
filter () 메서드를 사용했다는 점이 포인트다. filter() 는 보아하니 기존 배열에서 조건식을 true로 만족하는 요소만 남겨서 새로운 배열을 만드는 메서드다. 이번 문제처럼 기존 배열의 요소 중 일부를 그대로 남겨야 할 때 사용하면 좋을 것 같다.
function solution(arr, divisor) {
var answer = [];
answer = arr.filter((element) => element % divisor === 0)
return answer.length === 0 ? [-1] : answer.sort((a,b) => a-b )
// a와 b는 answer 배열의 요소다. 배열내에서 a,b 의 순서는 a가 뒤쪽 , b는 a보다 앞쪽 요소다.
// 뒤쪽 요소에서 앞쪽 요소를 뻈을 때 양수가 나오면 요소들의 순서를 그대로 놔둔다. 음수가 나오면 순서를 바꾼다.
// (a,b) => a-b 이 함수값이 음수가 나오면 a,b 간의 순서를 바꾼다.
// 즉 앞쪽 요소가 뒤쪽 요소보다 크면 서로 위치를 바꾼다. 오름차순 정렬이 된다.
}
sort() 메서드에 들어가는 compareFn 에 대한 주석도 넣었다.
compareFn 은 난해한 지점이 좀 있지만 다 이해할 수 있다.
특히 아래 두 링크를 참조하면 이해할 수 있다.
1) sort() MDN
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
2) sort() 관련 포스팅
Javascript Sort함수에 대한 잡지식
javascript sort 함수는 당신이 원하는대로 동작하지 않을 것이다. (만일 당신이 비교 함수를 작성하지 않는다면)
velog.io
이 포스팅에서, '아래와 같다' 는 말을 한 횟수는 아래와 같다.
5
'알고리즘 코딩' 카테고리의 다른 글
정규 표현식으로 숫자만 들어가는지 확인하기 (0) | 2023.04.16 |
---|---|
배열 2개의 내적 구하는 알고리즘 feat. reduce(acc, _, i) (0) | 2023.04.16 |
배열의 모든 요소의 값의 평균을 구하는 알고리즘 (0) | 2023.04.15 |
두 정수 사이에 있는 정수들의 합을 구하는 알고리즘 (0) | 2023.04.15 |
문자열의 가운데 글자를 가져오는 알고리즘 (2) | 2023.04.15 |