제일 작은 수 제거하기

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


    1. 기본형

    class Solution {
        public int[] solution(int[] arr) {	// ex) [4, 3, 2, 1]
            if (arr.length == 1) {			// 배열의 길이가 1인지 확인
                return new int[]{-1};		// -1 리턴
            }
    
            int min = arr[0];				// 가장 작은 수 찾기
    
            for (int i = 1; i < arr.length; i++) {
                if (arr[i] < min) {			// min보다 작은 숫자 나오면
                    min = arr[i];			// min 바꾸기
                }
            }
    
            int[] answer = new int[arr.length - 1]; // 원래 배열보다 길이가 1 작아짐
            int index = 0;
    
            for (int i = 0; i < arr.length; i++) {
                if (arr[i] != min) {		// min이 아닌 숫자만 새 배열에 넣음
                    answer[index] = arr[i];
                    index++;
                }
            }
    
            return answer;					// ex) [4, 3, 2]
        }
    }

    2. ArrayList 사용하기

    흐름은 기본형과 같다

    import java.util.ArrayList;
    
    class Solution {
       public int[] solution(int[] arr) {
           if (arr.length == 1) {
               return new int[]{-1};
           }
    
           int min = arr[0];
    
           for (int i = 0; i < arr.length; i++) {
               if (arr[i] < min) {
                   min = arr[i];
               }
           }
    
           ArrayList<Integer> list = new ArrayList<>();
    
           for (int i = 0; i < arr.length; i++) {
               if (arr[i] != min) {
                   list.add(arr[i]);
               }
           }
    
           int[] answer = new int[list.size()];
    
           for (int i = 0; i < list.size(); i++) { // ArrayList를 다시 int[] 배열로 바꿔서 return
               answer[i] = list.get(i);
           }
    
           return answer;
       }
    }

    3. index로 가장 작은 수 위치 찾기

    가장 작은 수의 값이 아니라 가장 작은 수의 위치를 찾는 방식

     class Solution {
         public int[] solution(int[] arr) {
             if (arr.length == 1) {
                 return new int[]{-1};
             }
    
             int minIndex = 0;
    
             for (int i = 1; i < arr.length; i++) {
                 if (arr[i] < arr[minIndex]) {
                     minIndex = i;
                 }
             }
    
             int[] answer = new int[arr.length - 1];
             int index = 0;
    
             for (int i = 0; i < arr.length; i++) {
                 if (i != minIndex) {	// 가장 작은 수가 있는 위치만 빼고 새 배열에 넣기
                     answer[index] = arr[i];
                     index++;
                 }
             }
    
             return answer;
         }
     }

    4. Stream 사용하기

     import java.util.Arrays;
    
     class Solution {
         public int[] solution(int[] arr) {
             if (arr.length == 1) {
                 return new int[]{-1};
             }
    
             int min = Arrays.stream(arr).min().getAsInt(); // 배열에서 가장 작은 수를 찾는다
    
             return Arrays.stream(arr)
                     .filter(num -> num != min)			// 작은 수가 아닌 숫자만 남기기
                     .toArray();
         }
     }

0개의 댓글