[자바(JAVA)] 나누어 떨어지는 숫자 배열 / Arrays.copyOf(), sort(), ArrayList<>, Collections.sort()

Noh Jihyeon·2023년 12월 14일
0
post-thumbnail



✅ 내 풀이 ①

import java.util.Arrays;
class Solution {
    public int[] solution(int[] arr, int divisor) {
        int[] answer = new int[arr.length];
        int index = 0;          // 새 배열의 인덱스값 확인하기

                for(int i : arr){
            if(i % divisor == 0) {
                answer[index] = i;
                index++;
            }
        }
        if(index == 0) {
            return new int[] {-1};
        }else {
            answer = Arrays.copyOf(answer, index);          // 초기화된 값 잘라내기
            Arrays.sort(answer);
            return answer;
        }
    }
}



처음에는 주어진 배열인 int[]에 임의로 길이를 설정한 후 index변수를 부여하여 잘라내는 방식으로 진행했다.


생각해보니 길이를 부여해서 추가작업이 생긴거면 애초에 길이설정이 필요없는 ArrayList로 진행하면 되지 않을까? 라는 생각이 들어서 다시 확인해봤다.


✅ 내 풀이 ②

import java.util.ArrayList;
import java.util.Collections;
class Solution {
    public ArrayList<Integer> solution(int[] arr, int divisor) {
        ArrayList<Integer> answer = new ArrayList<Integer>();

        for(int i : arr){
            if(i % divisor == 0) {
                answer.add(i);
            }
        }
        if(answer.size() == 0) {
            answer.add(-1);
        }else {
           Collections.sort(answer);

                    }
        return answer;
    }
}



ArrayList를 사용하면 index를 추가하고 copyOf(배열, 원하는 길이)를 안해도 된다.

다만 return값이 int[]라서 마지막에 int[]배열로 바꿔줘야 하는 단점이 있다.

현재 코드가 정상적으로 진행되는지 확인하기위해 ArrayList로 선언했으나 문제의 의도대로 진행하려면 int[]배열로 바꿔야하는점을 기억하자!






Arrays.copyOf()

배열의 특정 부분을 복사하여 새로운 배열을 생성하는 데 사용됩니다. 이 메서드는 원하는 길이로 배열을 크기 조정하거나, 배열의 특정 부분을 추출하고 싶을 때 유용하다.

배열 전체를 복사할 경우

sourceArray.length를 사용하여 복사할 길이를 지정함

배열의 일부분을 복사할 경우

배열의 인덱스 1부터 4까지 (4는 포함되지 않음)만 복사한다.

Arrays.copyOf() 메서드는 원본 배열의 요소 유형과 동일한 유형의 새로운 배열을 반환하기 때문에 int[] 배열의 경우에는 int[]로, String[] 배열의 경우에는 String[]로 복사된 배열이 생성된다.

profile
꼭꼭 씹어서 소화시키는 맛있는 코딩

0개의 댓글