문제 설명
array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요.
divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.
- arr은 자연수를 담은 배열입니다.
- 정수 i, j에 대해 i ≠ j 이면 arr[i] ≠ arr[j] 입니다.
- divisor는 자연수입니다.
- array는 길이 1 이상인 배열입니다.
| [5, 9, 7, 10] | 5 | [5, 10] |
| [2, 36, 1, 3] | 1 | [1, 2, 3, 36] |
| [3,2,6] | 10 | [-1] |
A. 생각한 풀이 방법
1. 나머지 값 0 인 배열 filter 함수 통해 거르기
2. 오름차순 배열로 반환하기 위해 sort 함수 사용
3. 나머지값 0인 값이 없을 때 -1 리턴하는 조건문
B. 해결 과정
const solution = (arr, divisor) => {
const res = arr.filter(item => item % divisor === 0 )
if(res.length === 0){
const zero = [-1]
return (zero)
}
return (res)
}
이렇게 했더니 오류 발생! 오름차순 조건을 까먹고 sort함수 사용하지 않음
const solution = (arr, divisor) => {
const res = arr.filter(item => item % divisor === 0 ).sort((a,b) => a - b )
if(res.length === 0){
const zero = [-1]
return (zero)
}
return (res)
}
처음에 그냥 arr.sort()로 써줬는데 모든 테스트 값들이 오름차순으로 정렬되지 않았다.
왜?
배열 정렬할 때 요소를 문자열로 취급해서 정렬하기 때문 => [2, 26, 1, 3]를 예로 들어보면, 배열을 정렬 시,
[1,2,26,3]으로 리턴하게 된다. 문자열로 변환되었을 때 "26" < "3" 첫 글자 2 vs 3으로 비교되기 때문.
그래서 sort 함수에 두 수 를 비교해서 정렬하는 식 작성해야 함.
----
다른 사람 풀이
function solution(arr, divisor) {
var answer = arr.filter(v => v%divisor == 0);
return answer.length == 0 ? [-1] : answer.sort((a,b) => a-b);
}
비슷한데 위 방법은 조건문을 삼항 연산자로 써줌
'알고리즘' 카테고리의 다른 글
| [프로그래머스][JS] Lv.2 최댓값과 최솟값 (0) | 2022.10.20 |
|---|---|
| [프로그래머스][JS] Lv.1 없는 숫자 더하기 (1) | 2022.10.11 |
| [프로그래머스][JS] Lv.1 음양 더하기 (0) | 2022.09.22 |
| [프로그래머스][JS] Lv.1 두 정수 사이의 합 (1) | 2022.09.21 |
| [프로그래머스][JS] Lv.1 가운데 글자 가져오기 (0) | 2022.09.19 |