Algorithm/프로그래머스

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

햄습햄 2021. 11. 2. 16:43

문제 설명

 

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

 

 

제한 조건

 

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

 


풀이 과정 (자바)

 

ArrayList인 lst를 생성했다.

입력받은 arr 배열에서 값 하나씩 divisor로 나눴고, 값이 딱 떨어질 때 lst에 넣었다.

 

그리고 lst의 size를 통해 int형 배열인 answer를 생성했다.

lst에 있는 값을 answer로 넣었다. (Integer인 ArrayList에서 int형 배열로 변환했다.)

 

sort를 통해 오름차순으로 answer를 정렬했다.

 

만약 나눠진 값이 없다면 lst에 추가된 값이 없을 것이고, answer에도 값이 없다.

answer의 길이가 0이 되는 이때, -1을 반환했다.

 

-1을 반환하지 않은 경우, answer를 반환했다.

 

 

결과

 

 


다른 사람의 풀이

 

입력받은 arr 배열로부터 스트림을 생성하여 divisor로 나눴다.

나머지가 0인 값만 추출했고, 이를 배열로 반환하여 int형 배열 answer를 생성했다.

(Arrays.stream(arr))

 

answer의 길이가 0인 경우, -1을 반환했다.

그리고 sort를 통해 오름차순으로 answer를 정렬 후, answer를 반환했다.

 

 

기타

 

다른 사람의 풀이를 통해 문제를 풀었을 때에는 간략해서 확실히 가독성이 좋았다. 그러나 스트림을 쓸 때마다 느끼지만, 속도 부분에서 현저히 느렸다. 때에 맞게 적절하게 사용할 필요가 있다.