프로그래머스 - 나누어 떨어지는 숫자 배열(Java)

왕효준·2023년 5월 26일
0

코딩 테스트

목록 보기
8/22

*모든 풀이 코드는 직접 작성하였습니다.

문제

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

제한사항

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

문제 풀이

배열의 요소 중 조건에 맞는 요소들을 오름차순으로 정렬한 배열을 반환하면 된다.
나는 for-each문을 사용해서 배열을 순회한 후, 조건에 맞는 요소를 ArrayList를 만들어 넣었다. 조건에 맞는 요소의 수를 알 수 없으므로 배열 대신 ArrayList를 사용했다.

오름차순으로 정렬 후 ArrayList를 Stream을 사용해서 배열로 변환해서 반환하면 끝이다.

+Stream으로만 풀어도 봤다.

풀이 코드

  1. for-each 문
import java.util.*;

class Solution {
    public int[] solution(int[] arr, int divisor) {
    
        ArrayList<Integer> list = new ArrayList<Integer>();//새 ArrayList 선언
        
        for(int a : arr){ //for-each문 순회
            if(a % divisor == 0){
                list.add(a);
            }
        }
        if(list.size() == 0) { //조건에 맞는 요소가 하나도 없다면 -1담은 배열 반환
           int[] noResult = {-1};
            return noResult;
        }
        //순회 후 오름차순 정렬
        Collections.sort(list);
        //ArrayList -> 배열 변환후 반환
        int[] result = list.stream().mapToInt(Integer::intValue).toArray();
        return result;
        
    }
}
  1. Stream 사용
import java.util.*;

class Solution {
    public int[] solution(int[] arr, int divisor) {
        int[] result = Arrays.stream(arr)
            .filter(n -> n % divisor == 0) // 나눠 떨어지는 것만 필터링
            .sorted() //오름차순 정렬
            .toArray(); //배열로 변환

        if (result.length == 0) {
            result = new int[] {-1};
        }

        return result;
    }
}```
profile
자바 백엔드 개발자

0개의 댓글