[프로그래머스] 나누어 떨어지는 숫자 배열 – 자바


프로그래머스 “나누어 떨어지는 숫자 배열” 문제 해결과정입니다.

나누어 떨어지는 숫자 배열

문제설명

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]

문제 해결과정

프로그래머스 코드

import java.util.*;

class Solution {
    public int[] solution(int[] arr, int divisor) {
        int[] answer = {};
        List<Integer> list = new ArrayList<>();
        
        for(int i = 0 ; i < arr.length; i++){
            if(arr[i] % divisor == 0){
                list.add(arr[i]);
            }
        }
        if(list.isEmpty()) list.add(-1);
        
        answer = list.stream().mapToInt(Integer::intValue).toArray();

        Arrays.sort(answer);
        return answer;
    }
}

배열에 값을 추가하며 크기를 늘리는 것은 코드가 복잡하다 생각해 List를 사용했다. list를 선언하고 arr의 값을 list에 넣기 위해 반복문을 작성했다. arr의 값이 divisor로 나뉘는 것으로 조건을 걸어 list에 값을 추가했다. 만약 리스트에 값이 없다면 “-1″을 추가하도록 작성했다. 코드를 줄이기 위해 list로 리턴을 하고 싶었지만 기본적으로 주어진 형태가 리턴 값이 int[] 배열이고 answer도 주었기 때문에 answer에 리스트 값을 추가하는 형태로 작성했다. 리스트 컬렉션에 stream 메소드로 요소를 스트림으로 변환한다. 이후에 Int 타입으로 변환(mapToInt)하고 배열로 변환하여 결과를 answer에 넣었다. 문제 조건에 오름차순 형태라 하였으므로 정렬(sort)하여 리턴해주었다.


댓글 남기기

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.