[PROGRAMMERS] 나누어 떨어지는 숫자 배열

💡 나의 풀이

public int[] solution(int[] arr, int divisor) {
	int[] answer = new int[arr.length];
	int count = 0;
	int fail = 0;

	for(int i = 0; arr.length > i; i++){
		if(arr[i] % divisor == 0){
			answer[count] = arr[i];
			count++;
		}else{
			fail++;
		}
	}

	if(fail == arr.length){
		return new int[]{-1};
	}

	answer = Arrays.stream(answer).filter(x -> x != 0).toArray();
	Arrays.sort(answer);

	return answer;
}
  • 반복문을 돌리면서 배열의 각 항목마다 주어진 divisor로 나눈다.
  • 나누어 떨어진다면 answer 배열에 추가하고 그렇지 않다면 fail에 1을 더한다.
  • 반복문이 끝나고 만약 fail과 arr의 길이가 같다면 배열의 항목이 모두 나누어 떨어지지 않은 것이므로 int 배열에 -1을 넣어 반환한다.
  • 나누어 떨어지는게 있다면 Arrays이 filter를 이용해 배열의 값이 0인 것을 거르고 반환한다.

💡 다른 사람의 풀이

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};
	
    java.util.Arrays.sort(answer);

    return answer;
}
  • Arrays의 filter를 사용해서 항목이 divisor로 나누어 떨어지는 것들을 배열로 만들어 answer에 넣어준다.
  • 만약 answer의 길이가 0이라면 나누어 떨어지는게 없는 것이니 -1을 반환한다.
  • 그렇지 않다면 Arrays의 sort로 오름차순 정렬해준다.

다른 사람의 풀이처럼 Arrays의 filter로 처음에 나누어지는 수를 배열로 만들었으면 좋았을텐데 나는 뒷 부분에 0을 제외할 때 써서 너무 아쉬웠다. 처음에 썼으면 fail 변수를 선언해서 나누어지지 않은 횟수를 배열 길이와 비교할 일도 없었을텐데 아쉬움이 많이 남는다. 다음에는 제출하기 전에 더 효율적이게 푸는 방법은 없을지 더 고민해봐야겠다.

좋은 웹페이지 즐겨찾기