본문으로 바로가기

📘문제 설명

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

https://school.programmers.co.kr/learn/courses/30/lessons/12910

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 


📌 제한조건

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


💡 개념 설명

1️⃣ 단계: 결과 저장용 리스트 생성

divisor로 나누어 떨어지는 값들을 임시로 저장할 ArrayList를 만듭니다. 배열은 처음에 크기를 정해야 하지만, ArrayList는 크기가 정해져 있지 않아 값을 계속 추가하기 편리해요.

2️⃣ 단계: 나누어 떨어지는 값 찾기

for 반복문으로 arr 배열의 숫자를 처음부터 끝까지 하나씩 확인합니다. 각 숫자를 divisor로 나누었을 때 나머지가 0인지(% 연산자 사용) 검사해요. 나머지가 0이라면 그 숫자를 1단계에서 만든 ArrayList에 추가합니다.

3️⃣ 단계: 예외 상황 처리

반복문이 모두 끝난 후, 만약 ArrayList에 아무 값도 추가되지 않았다면 나누어 떨어지는 숫자가 하나도 없다는 뜻이에요. 이때는 문제의 요구사항에 따라 -1만 들어있는 배열을 만들어 반환하고 함수를 종료합니다.

4️⃣ 단계: 배열로 변환하고 정렬하기

ArrayList에 값이 하나라도 있다면, 이 값들을 실제 정답 배열(int[] answer)로 옮겨 담습니다. 그 후, 자바의 기본 정렬 기능인 Arrays.sort()를 사용해 배열의 값들을 오름차순(작은 수부터 큰 수 순서)으로 정렬합니다.

5️⃣ 단계: 최종 결과 반환

정렬까지 마친 최종 배열 answer를 반환합니다.


📎 입출력 예시


📎 코드

import java.util.ArrayList;
import java.util.Arrays;

class Solution {
    public int[] solution(int[] arr, int divisor) {
        // 1. 나누어 떨어지는 값들을 저장할 동적 리스트를 만듭니다.
        ArrayList<Integer> tempList = new ArrayList<>();

        // 2. arr 배열의 모든 요소를 확인합니다.
        for (int number : arr) {
            // 3. 요소가 divisor로 나누어 떨어지는지 확인합니다.
            if (number % divisor == 0) {
                tempList.add(number); // 나누어 떨어지면 리스트에 추가합니다.
            }
        }

        // 4. 나누어 떨어지는 수가 하나도 없는 경우를 처리합니다.
        if (tempList.isEmpty()) {
            // -1을 담은 배열을 만들어 반환합니다.
            int[] answer = {-1};
            return answer;
        }

        // 5. 리스트를 배열로 변환합니다.
        int[] answer = new int[tempList.size()];
        for (int i = 0; i < tempList.size(); i++) {
            answer[i] = tempList.get(i);
        }

        // 6. 배열을 오름차순으로 정렬합니다.
        Arrays.sort(answer);

        // 7. 최종 결과를 반환합니다.
        return answer;
    }
}

 


📎 결과