나누어 떨어지는 숫자 배열_Java

컴투루·2022년 6월 28일
0

프로그래머스 Lv.1

목록 보기
21/38

연습문제

🔥 나누어 떨어지는 숫자 배열 🔥


👀 문제

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]
[2,3,6]10[-1]

🙋‍♀️ 풀이

import java.util.*;

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

메모리: 76.1 MB, 시간: 2.84 ms

  1. 배열 arr의 길이만큼 반복문을 돌면서 나누어떨어지는 arr[i]를 list에 add해주고 n++
  2. n이 0이라면 즉 나누어 떨어지는 수가 없었다면 list에 -1을 add해준다.
  3. Integer ArrayList를 int 배열로 변환하고 sort로 오름차순 정렬을 해서 return

💬 다른 풀이

1. java stream을 이용

import java.util.Arrays;

class Solution {
  public int[] solution(int[] arr, int divisor) {
          int[] answer = Arrays.stream(arr).filter(factor -> factor % divisor == 0).toArray();
          if(answer.length == 0) answer = new int[] {-1};
          Arrays.sort(answer);
          return answer;
  }
}

메모리: 78.7 MB, 시간: 2.28 ms

  1. arr을 stream으로 변환하고 filter를 이용해서 divisor로 나누어 떨어지는 element를 filter하고 toArray를 통해 다시 배열로 변환해준다.
  2. 만약 answer의 length가 0이라면 나누어떨어지는 element가 하나도 없었다는 뜻이므로 answer에 -1을 대입해준다.
  3. sort를 이용해 오름차순으로 정렬하고 return 해준다.

👏 마무리

익숙한 방법말고 java의 기능들을 활용해서 문제를 푸는 노력을 해보자!

profile
맘 먹으면 못할 게 없지

0개의 댓글