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

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

문제: https://school.programmers.co.kr/learn/courses/30/lessons/12910



✅ 내 풀이


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=0; i<arr.length; i++) {
            if(arr[i] % divisor == 0) {
                answer[index] = arr[i];
                index++;
            }
        }
        if(index == 0) {
            return new int[] {-1};
        }else {
            answer = Arrays.copyOf(answer, index);
            Arrays.sort(answer);
        }

                return answer;
    }
}





✅ 반환값을 바꿔봤음

import java.util.ArrayList;
import java.util.Collections;

class Solution {
//    public int[] solution(int[] arr, int divisor) {
//    public ArrayList<Integer> solution(int[] arr, int divisor) {
        ArrayList<Integer> answer = new ArrayList<Integer>();

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

                return answer;
    }
}

이렇게 문제를 바꾸면 안되지만 주어진 문제대로 풀어보기도 했고 내가 원하는 방식으로 풀고싶어서 확인해봤다.

이 문제는 배열의 나머지 여부를 확인 후 조건에 해당되는 값만 배열로 받은 후 오름차순으로 정렬하는 문제이다.

array와 Arrays.sort()로 해결할 수 있으나, 또 사실 기존의 문제가 int[]형으로 돌려주기 때문에 array로 푸는것이 맞으나 

array의 경우 배열이 추가될 때 값의 수정이 아닌 복사 후 새로 만들기 때문에 메모리와 성능적인 관점에서 동적으로 조정이 가능한 ArrayList를 써보고 싶었다.

그리고 array의 경우 초기화가 필수이기 때문에 초기화값(0)이 남을 수 있고, 쓰레기값을 버리기 위해 오름차순으로 정리 후 다시 배열을 생성해야하는 번거로움이 있다고 생각했다.



1. 반환타입 고치기 int[] -> ArrayList

2. 향상된 for문으로 해당값만 answer.add() 하기

3. Collections.sort()를 이용하여 오름차순 정리하기

* Collections.sort()
List 인터페이스를 구현한 모든 컬렉션에 사용할 수 있다.
ArrayList, LinkedList, Vector 등과 같은 자바의 내장 컬렉션 클래스뿐만 아니라, Stack, Queue 등과 같은 컬렉션 인터페이스를 구현한 사용자 정의 컬렉션 클래스에도 Collections.sort()를 적용할 수 있다.

Collections.sort()는 컬렉션의 요소를 정렬하기 위해 자바의 정렬 알고리즘을 활용합니다. 따라서 요소들이 정렬 가능한 객체여야 한다.
정렬 가능한 객체는 Comparable 인터페이스를 구현한 객체이거나, Comparator를 제공하여 비교 로직을 지정한 객체이다.
이에 따라 컬렉션의 요소가 정렬 가능한 객체인 경우 Collections.sort()를 사용하여 정렬할 수 있다.

4. answer.size()로 공배열 여부를 확인 후 공배열일 경우 .add(-1)를 진행하기



👉정답 도출 확인완료
profile
꼭꼭 씹어서 소화시키는 맛있는 코딩

0개의 댓글