본문 바로가기
알고리즘/프로그래머스 풀이

[JAVA] 프로그래머스 - 제일 작은 수 제거하기

by krapoi 2021. 11. 10.
반응형

이번에 풀어볼 문제는 제일 작은 수 제거하기이다.

 

문제 설명

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

 

이번 문제에서 주의할 점은 배열을 하나 삭제해야 된다는 거다.

 

제한 조건

  • arr은 길이 1 이상인 배열입니다.
  • 인덱스 i, j에 대해 i ≠ j이면 arr [i] ≠ arr [j]입니다.

제한 조건을 잘 보면 중복된 수가 없다는 것을 알 수 있다. (인덱스 i, j에 대해 i ≠ j이면 arr [i] ≠ arr [j]입니다. 부분)

 

이제 코드를 살펴보자

 

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

public int[] solution(int[] arr) {
        int min = arr[0];
        int index = 0;
        List<Integer> list = new ArrayList<>();

        for(int i = 0; i < arr.length; i++){
            list.add(i,arr[i]);
            if(arr.length <= 1){
                return new int[]{-1};
            }

            if(arr[i] < min){
                min = arr[i];
                index = i;
                System.out.println(index);
            }

        }
        list.remove((Integer) min);
        int[] answer = new int[list.size()];
        for(int i = 0; i < list.size(); i ++){
            answer[i] = list.get(i);
        }
        return answer;

    }

처음 min의 값을 들어오는 배열 arr []의 첫 번째 값으로 잡았다.

그 뒤 리스트를 선언 해 두고 리스트에 arr의 값을 다 넣어 준다. 

여기서 arr의 길이가 1보다 같거나 작다면 바로 -1을 리턴해 버린다. (배열에 [10]이 들어왔다는 뜻)

또한 arr [i]의 값이 min의 값보다 크면 min의 값을 arr [i]로 바꾸어주고 index를 i로 바꾸어준다.

여기서 index는 가장 작은 값이 들어있는 위치이다. (그냥 어느 위치인지 알기 위해)

그다음 list에서 min값을 없애주고 int배열 answer를 크기를 list의 size로 만들어 준다.

그다음 answer에 list값을 하나하나 넣어준다.

리턴하면 끝.

 

반응형