Lv. 1 - 나누어 떨어지는 숫자 배열 풀이과정
문제 설명
- 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 ] |
입출력 예 설명
3-1) 입출력 예 설명 #1
arr
의 원소 중 5로 나누어 떨어지는 원소는 5와 10입니다. 따라서 [5, 10]을 리턴합니다.
3-2) 입출력 예 설명 #2
arr
의 모든 원소는 1으로 나누어 떨어집니다. 원소를 오름차순으로 정렬해 [1, 2, 3, 36]을 리턴합니다.
3-3) 입출력 예 설명 #3
3, 2, 6은 10으로 나누어 떨어지지 않습니다. 나누어 떨어지는 원소가 없으므로 [-1]
을 리턴합니다.
프로그래머스에서 제공한 코드
처음 프로그래머스에서 작성된 코드는 아래와 같다.
function solution(arr, divisor) {
var answer = [];
return answer;
}
문제 풀이
const solution = (arr, divisor) => {
let x = [];
for (let i = 0; i <= arr.length; i++) {
if (arr[i] % divisor === 0) x.push(arr[i]);
}
x.length === 0 ? x.push(-1) : x.sort((a, b) => a - b);
return x;
};
함수 선언
- 화살표 함수를 사용하여
arr
,divisor
매개변수를 받는다.
풀이
- 먼저 배열을 return 하기 위해 변수 x를 선언한다.
- 이후
arr
의 length 값으로 반복문을 실행한다. - 실행하며 divisor로 나누어 떨어지는 값을 구하기 위해
arr
의 길이만큼 반복문을 실행하며 배열마다arr[i] % divisor === 0
식을 계산하여 true일 경우 변수로 선언한x
에 값을 담아준다. - 문제 설명에서
divisior
로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 줘야하고 나누어 떨어지면 그 값을 오름차 순으로 정렬한 배열을 반환하기 위해 삼항연산자로 처리했다.x.length === 0 ? x.push(-1) : x.sort((a,b) => a - b);
=x의 길이가 0일 경우 x에 -1을 대입한다 그렇지 않을 경우 반복문을 통해 대입한 배열을 오름차 순으로 변환한다
결과 반환
-
arr
이 [5,9,7,10],divisor
가 5일 경우 [5,10]을 리턴함 -
arr
이 [2,36,1,3],divisor
가 1일 경우 [1,2,3,36]을 리턴함 -
arr
이 [3,2,6],divisor
가 10일 경우 [-1]을 리턴함
실행
-
console.log(solution([5,9,7,10], 5))
실행하면 [5,10]이 출력된다. -
console.log(solution([2,36,1,3], 1))
실행하면 [1,2,3,36]이 출력된다. -
console.log(solution([3,2,6], 10))
실행하면 [-1]이 출력된다.
다른 사람의 풀이 참고
filter
,map
,reduce
메서드들과 반복문을 적재적소에 사용하기 위해 생각을 많이 했는데, 이번 문제에서 filter
가 생각이 안났다.
아래의 문제 풀이를 보면 answer
변수에 filter
메서드를 사용하여 배열 % divisor == 0
값을 넣어주고, 리턴한 방법으로 코드가 많이 간결해졌다.
앞으로 더 고민해보면서 작업해봐야겠다!!
// [20명] filter 메서드를 사용한 문제 풀이
function solution(arr, divisor) {
var answer = arr.filter((v) => v % divisor == 0);
return answer.length == 0 ? [-1] : answer.sort((a, b) => a - b);
}
링크
- 문제 링크: 문제 링크
- Git: rarrit github
출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges