제일 작은 수 제거하기, 배열과 컬렉션

이해찬·2023년 8월 19일
0

항해일지

목록 보기
18/35

📟시도

import java.util.*;

class Solution {
    public int[] solution(int[] arr) {
        
        int[] answer = new int[arr.length];
        List<Integer> arr2 = new ArrayList<>();
        Arrays.sort(arr);
        
        for(int i=1; i<arr.length; i++){
            arr2.add(arr[i]);
        }
       Collections.sort(arr2, Collections.reverseOrder());
        
        
        
        if(arr.length == 1){
            answer = new int[]{-1};
            return answer;
        } else {
            answer = arr2;
            return answer;
        }
        
        
    }
}

의도 : 가장 작은 수를 제거 하고 내림차순으로 리턴이니까, arr 배열을 오름차순 정렬한 뒤, 인덱스 0번을 제외한 값을 새로운 컬렉션에 추가 -> 내림차순 리턴을 위해 ->Collections.reverseOrder()
그리고 난 뒤 조건문에 따른 결과값 반환

반환 타입이 배열인데 컬렉션을 반환하려고 했음


💻수정

import java.util.*;

class Solution {
    public int[] solution(int[] arr) {
        
        if(arr.length == 1){
            return new int[]{-1};
        }
        
        List<Integer> arr2 = new ArrayList<>();
   
        
        for(int i=1; i<arr.length; i++){
            arr2.add(arr[i]);
        }
       Collections.sort(arr2, Collections.reverseOrder());
        
        int[] answer = new int[arr2.size()];
        for(int i=0; i<arr2.size(); i++){
            answer[i] = arr2.get(i);
        }
        
        return answer;
        
    }
}
  • 예외인 경우는 바로 return 출력
  • 컬렉션을 배열값에 다시 저장해서 출력

코드 실행은 되나, 테스트에서 전부 실패 ..?

📟시도2
최소값을 특정한 이후에 다시 시도

import java.util.*;

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];
            }
        }
        
        List<Integer> arr2 = new ArrayList<>();
        for(int i=0; i<arr.length-1; i++){
            if(arr[i] != min){
                arr2.add(arr[i]);
            }
        }
        Collections.sort(arr2, Collections.reverseOrder());
        
        int[] answer = new int[arr2.size()];
        for(int i = 0; i<arr2.size(); i++){
            answer[i] = arr2.get(i);
        }
        return answer;
        
    }
}

또 테스트에서 안되는 오류

📟시도3
자세히 보니, 문제에 내림차순이란 말이 없다-> 배열만 사용

import java.util.*;

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

배열만 사용해서 다시 수정했으나, 모두 코드 실행은 되지만 테스트에서 안되는 오류

for(int i=0; i<arr.length-1; i++){ if(arr[i]!=min) 최소값이 첫번째 인덱스에 없을 경우도 있기 때문에 범위가 틀렸고, answer[i] = arr[i] -> 최소값을 만날 경우 answer의 인덱스값을 건너뛰기 때문에 따로 설정필요

💻수정

import java.util.*;

class Solution {
    public int[] solution(int[] arr) {
        
        if(arr.length == 1){
            return new int[]{-1};
        }
        
        int min = arr[0];
        for(int i=1; i<arr.length; i++){
            if(arr[i]<min){
                min = arr[i];
            }
        }
        
        int[] answer = new int[arr.length-1];
        int index = 0;
        for(int i=0; i<arr.length; i++){
            if(arr[i]!=min){
                answer[index] = arr[i];
                index++;
            }
        }
        return answer;
        
    }
}
profile
디자인에서 개발자로

0개의 댓글