나누어 떨어지는 숫자 배열
문제 설명
array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요.
divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.
제한사항
- arr은 자연수를 담은 배열입니다.
- 정수 i, j에 대해 i ≠ j 이면 arr[i] ≠ arr[j] 입니다.
- divisor는 자연수입니다.
- array는 길이 1 이상인 배열입니다.
입출력 예
arr | divisor | return |
[5, 9, 7, 10] | 5 | [5, 10] |
[2, 36, 1, 3] | 1 | [1, 2, 3, 36] |
[3, 2, 6] | 10 | [-1] |
입출력 예 설명
입출력 예#1
arr의 원소 중 5로 나누어 떨어지는 원소는 5와 10입니다. 따라서 [5, 10]을 리턴합니다.
입출력 예#2
arr의 모든 원소는 1으로 나누어 떨어집니다. 원소를 오름차순으로 정렬해 [1, 2, 3, 36]을 리턴합니다.
입출력 예#3
3, 2, 6은 10으로 나누어 떨어지지 않습니다. 나누어 떨어지는 원소가 없으므로 [-1]을 리턴합니다.
주어진 문제
class Solution {
public int[] solution(int[] arr, int divisor) {
int[] answer = {};
return answer;
}
}
나의 문제풀이
import java.util.*;
class Solution {
public int[] solution(int[] arr, int divisor) {
// 동적 배열을 사용하기 위해 answer를 list로 선언.
ArrayList<Integer> answer = new ArrayList<>();
// divisor로 나눠지는 값을 answer에 추가한다.
for (int i = 0; i < arr.length; i++) {
if (arr[i] % divisor == 0) {
answer.add(arr[i]);
}
}
if (answer.isEmpty()) { // answer값이 비었으면 -1을 추가하고
answer.add(-1);
} else { // 아니면 오름차순 정렬
answer.sort(Comparator.naturalOrder());
}
// 스트림의 메서드를 이용해 int형 배열로 변환하여 출력
return answer.stream().mapToInt(i -> i).toArray();
}
}
- ArrayList를 이용해서 divisor로 나눠지는 값을 입력한다.
- list가 비어 있으면 -1을 입력하고 아니면 오름차순 정렬을 해준다.
- stream().mapToInt()를 이용해서 int[]의 형태로 출력해준다.
다양한 방법으로 풀어보았는데 결국 마지막에 int형 배열로 어떻게 변환해 주는가에서 막혀서 찾아보다 스트림으로 mapToInt()를 이용해서 인트형으로 변환하는 걸 사용했서 문제를 풀었다.
스트림에 관해서는 익숙하지 않아서 사용법도 잘 모르고 주로 사용되는 메서드도 몰라서 이 부분에 대해서 좀 더 공부해야겠다.
똑같은 작업을 반복하더라도 나눠지는 수의 개수를 구하고 이후에 배열을 정의해서 사용했다면 더 쉬웠을까?
문제 출처 - https://school.programmers.co.kr/learn/courses/30/lessons/12910
'생각정리 > 코딩테스트' 카테고리의 다른 글
[JAVA][Level1]PROGRAMMERS 가운데 글자 가져오기 (0) | 2023.08.19 |
---|---|
[JAVA][Level1]PROGRAMMERS 약수의 개수와 덧셈 (0) | 2023.08.19 |
[JAVA][Level1]PROGRAMMERS 하샤드 수 (0) | 2023.08.19 |
[JAVA][Level1]PROGRAMMERS 정수 내림차순으로 배치하기 (0) | 2023.08.18 |
[JAVA][Level1]PROGRAMMERS 정수 제곱근 판별 (0) | 2023.08.18 |