Java/알고리즘

제일 작은 수 제거하기

티코딩 2024. 1. 19. 11:01

잠에서 덜깬채로 풀어서 처음에 내림차순으로 sort해주고 가장 작은거 빼주면 되겠구나, 했는데 5분뒤에 어라? 그냥 작은수만 제거해주는거였구나 싶었다. 테스트케이스만 생각했다가 큰코다칠뻔했다. 생각보다 오래걸렸다.

public static int[] solution(int[] arr) {
		//arr에서 가장 작은 수 min을 빼므로 answer의 길이는 arr길이-1
        int[] answer = new int[arr.length-1];
        //빈배열이 정답으로 들어올경우 리턴하는 배열 real
        int[] real = {-1};
        //가장 작은수가 맨뒤일경우도있으니 맨마지막 원소를 min으로 가정(아니어도 괜찮음)
        int min = arr[arr.length-1];
        //두번째 반복문에서 
        int minIndex = 0;
        // 가장 작은 수 구하기
        for(int i = 0; i < arr.length; i++){
            if(min >= arr[i]){
                min = arr[i];
                minIndex = i;
            }
        }
        //min 빼주기
        for(int j = 0, k = 0; j < answer.length; j++, k++){
        	//만약 k가 가장작은원소의 인덱스일경우, 다음 인덱스로 넘어가고 k++해줌
            if(k == minIndex) {
                answer[j] = arr[k+1];
                k++;
            }else {
                answer[j] = arr[k];
            }
        }
        //answer이 빈배열일 경우 real 반환
        if(answer.length == 0){
            return real;
        }
        return answer;
    }