본문으로 건너뛰기

Lv.1 - 나누어 떨어지는 숫자 배열

· 약 2분
준열
프론트엔드 개발자

프로그래머스 Level 1 문제 "나누어 떨어지는 숫자 배열"

📋 문제 설명

array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요. divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.

🔒 제한사항

  • arr은 자연수를 담은 배열입니다.
  • 정수 i, j에 대해 i ≠ j 이면 arr[i] ≠ arr[j] 입니다.
  • divisor는 자연수입니다.
  • array는 길이 1 이상인 배열입니다.

📝 입출력 예

arrdivisorreturn
[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]을 리턴합니다.

💡 해결 과정

이 문제는 다음과 같은 단계로 접근할 수 있습니다:

  1. 필터링: 배열에서 divisor로 나누어 떨어지는 원소들만 추출
  2. 정렬: 추출된 원소들을 오름차순으로 정렬
  3. 예외 처리: 나누어 떨어지는 원소가 없다면 [-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);
}

🔍 코드 설명

  1. 변수 초기화: let result = []로 나누어 떨어지는 원소들을 담을 빈 배열 생성

  2. for...of 반복문: 배열의 각 원소를 순회하며 조건 확인

    • for(let num of arr): 배열의 각 원소를 num 변수에 할당
  3. 조건 검사: if(num % divisor === 0)

    • 나머지 연산자(%)를 사용해 나누어 떨어지는지 확인
    • 나머지가 0이면 나누어 떨어지는 수
  4. 배열에 추가: result.push(num)

    • 조건을 만족하는 원소를 result 배열에 추가
  5. 결과 반환: return result.length === 0 ? [-1] : result.sort((a, b) => a - b)

    • 삼항 연산자로 빈 배열 체크
    • 원소가 없으면 [-1], 있으면 오름차순 정렬 후 반환

📚 배운 점

  • for...of 반복문 활용: 배열의 각 원소를 간단하게 순회
  • 조건문과 배열 메서드 조합: if문으로 조건 확인 후 push()로 원소 추가
  • 삼항 연산자 활용: 간결한 조건부 반환문 작성
  • 숫자 정렬 주의사항: sort() 메서드는 기본적으로 문자열 정렬이므로 숫자 정렬 시 비교 함수 필요

문제 출처: 프로그래머스