Lv.1 - 나누어 떨어지는 숫자 배열
· 약 2분
프로그래머스 Level 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] |
입출력 예 설명
입출력 예 #1
- arr의 원소 중 5로 나누어 떨어지는 원소는 5와 10입니다.
- 따라서 [5, 10]을 리턴합니다.
입출력 예 #2
- arr의 모든 원소는 1로 나누어 떨어집니다.
- 원소를 오름차순으로 정렬해 [1, 2, 3, 36]을 리턴합니다.
입출력 예 #3
- 3, 2, 6은 10으로 나누어 떨어지지 않습니다.
- 나누어 떨어지는 원소가 없으므로 [-1]을 리턴합니다.
💡 해결 과정
이 문제는 다음과 같은 단계로 접근할 수 있습니다:
- 필터링: 배열에서 divisor로 나누어 떨어지는 원소들만 추출
- 정렬: 추출된 원소들을 오름차순으로 정렬
- 예외 처리: 나누어 떨어지는 원소가 없다면 [-1] 반환
✅ 정답 코드
function solution(arr, divisor) {
let result = [];
for (let num of arr) {
if (num % divisor === 0) {
result.push(num);
}
}
return result.length === 0 ? [-1] : result.sort((a, b) => a - b);
}
🔍 코드 설명
-
변수 초기화:
let result = []
로 나누어 떨어지는 원소들을 담을 빈 배열 생성 -
for...of 반복문: 배열의 각 원소를 순회하며 조건 확인
for(let num of arr)
: 배열의 각 원소를 num 변수에 할당
-
조건 검사:
if(num % divisor === 0)
- 나머지 연산자(%)를 사용해 나누어 떨어지는지 확인
- 나머지가 0이면 나누어 떨어지는 수
-
배열에 추가:
result.push(num)
- 조건을 만족하는 원소를 result 배열에 추가
-
결과 반환:
return result.length === 0 ? [-1] : result.sort((a, b) => a - b)
- 삼항 연산자로 빈 배열 체크
- 원소가 없으면 [-1], 있으면 오름차순 정렬 후 반환
📚 배운 점
- for...of 반복문 활용: 배열의 각 원소를 간단하게 순회
- 조건문과 배열 메서드 조합: if문으로 조건 확인 후 push()로 원소 추가
- 삼항 연산자 활용: 간결한 조건부 반환문 작성
- 숫자 정렬 주의사항:
sort()
메서드는 기본적으로 문자열 정렬이므로 숫자 정렬 시 비교 함수 필요
문제 출처: 프로그래머스