제일 작은 수 제거하기

하연·2021년 12월 16일
0
post-thumbnail

🟨 내 풀이:

1) 길이가 1인 경우를 먼저 처리한 후에
2) for문으로 input으로 주어진 배열에서 가장 작은 ele와 ele의 index를 찾기
3) 그 ele index로 0-index index-배열끝 두 배열을 만든다.
4) 두 배열을 연결해서 가장 작은 ele을 뺀 새로운 배열을 만든다.
5) 길이가 1인 경우를 먼저 처리한 후에 가장 작은 값을 구하고

import java.io.*;
import java.util.*;
   
   public static int[] solution(int[] arr) {
        int[] answer = new int [arr.length];
        int min = 999999;
        int mindex = 0;
        if(arr.length==1){
            answer[0] = -1;
        }else{
            for(int a= 0; a < arr.length; a++){
                if(arr[a]<min){ min=arr[a];mindex=a;}
            }
            int[] arr1 = Arrays.copyOfRange(arr, 0, mindex);
            int[] arr2 = Arrays.copyOfRange(arr, mindex, arr.length-1);
            answer=Arrays.copyOf(answer,answer.length-1);
            System.arraycopy(arr1, 0, answer, 0, arr1.length);
            System.arraycopy(arr2, 0, answer, arr1.length, arr2.length);

        }
        return answer;
    }

양수는 통과하는데 음수를 넣으면 문제가 생긴다.

🟩 해답:

1) 길이가 1인 경우를 먼저 처리한 후에
2) 가장 작은 값을 구하고
3) answer 배열에 minindex를 뺀 모든 값을 copy한다.

class Solution {
    public int[] solution(int[] arr) {
        
        if(arr.length == 1) return new int[]{-1};
        
        int minidx = 0;        
        for(int i=0; i<arr.length; i++) {
            if(arr[minidx] > arr[i]) {
                    minidx = i;
            }
        }
        
        int[] answer = new int[arr.length-1];
        int cnt = 0;
        for(int i=0; i<arr.length; i++) {
            if(i == minidx) continue;
            answer[cnt++] = arr[i];
        }
        
        return answer;
    }
}

**비슷한거 같지만 훨씬 깔끔한 코드인것 같다.

0개의 댓글