제일 작은 수 제거하기

0

TIL

목록 보기
110/126

정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.


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

public class Test_19_RemoveSmallestNumber {
    public int[] solution(int[] arr) {
        int[] answer = new int[arr.length - 1];
        List<Integer> intList = new ArrayList<>();
        int minNum = 0;

        // 배열의 길이가 1일 경우 첫 인덱스에 -1을 담아서 리턴
        if (arr.length == 1) {
            return new int[]{-1};
        }

        // 매개변수로 받은 arr배열을 리스트로
        for (int element : arr) {
            intList.add(element);
        }

        // 최소값을 찾고 어레이리스트에서 제거
        minNum = Collections.min(intList);
        intList.remove((Integer) minNum);

        // 어레이리스트를 배열로
        for (int i = 0; i < intList.size(); i++) {
            answer[i] = intList.get(i);
        }

        return answer;
    }
}

배열 안에있는 요소를 제거하기 위해 리스트로 바꾸고
최소값을 찾아서 제거, 다시 배열로 변경하는 방법.
항상 이렇게 비슷한 방식으로 했었는데 리스트를 사용하지 않는 다른 깔끔한 방법이 있을거같아 추가적으로 고민해보았다.


public class Test_19_RemoveSmallestNumber {
    public int[] solution(int[] arr) {
        if (arr.length == 1) {
            return new int[]{-1};
        }

        int minNum = arr[0];
        int minIndex = 0;

        for (int i = 1; i < arr.length; i++) {
            if (arr[i] < minNum) {
                minNum = arr[i];
                minIndex = i;
            }
        }

        int[] answer = new int[arr.length - 1];
        int answerIndex = 0;

        for (int i = 0; i < arr.length; i++) {
            if (i != minIndex) {
                answer[answerIndex] = arr[i];
                answerIndex++;
            }
        }

        return answer;
    }
}

인덱스의 길이가 1인 경우를 가장 우선적으로 -1을 리턴하도록 하였고, for문과 if문으로 최소값과 그 인덱스를 알아낸다.
길이가 arr배열보다 1짧도록 answer 배열을 선언하고 최소값을 제외한 나머지 요소들을 answer 배열에 담아서 반환시킨다.


항상 하던 리스트를 만들어 remove로 제거하는 것이 아니라 최소값만을 제외하고 새로운 배열을 만드는 방법이라 리스트를 거치지 않고서 완성된 코드라서 굉장히 만족스럽다.

0개의 댓글