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

[프로그래머스] 제일 작은 수 제거하기 - (JAVA/ 자바)

by pandastic 2025. 3. 28.
반응형

 

[처음에 내가 작성한 코드]

import java.util.*;
import java.lang.Math;

class Solution {
    public int[] solution(int[] arr) {
        int[] answer = {};
        List<Integer> list = new ArrayList<>();
        
        int min = 0;
        
        if(arr.length <= 1){
            answer = new int[1];
            answer[0] = -1;
        }else{
            for(int i=0; i<arr.length; i++){
                min = Math.min(arr[i], arr[i]);
                list.add(arr[i]);
            }
            
            list.remove(Integer.valueOf(min));
            answer = new int[list.size()];
            
            for(int j=0; j<list.size(); j++){
                answer[j] += list.get(j);
            }
        }
        return answer;
        
    }
}

 

int min = 0; 으로 설정했을 때

min = Math.min(min, arr[i]); 로 하면 min의 초기화 값인 0으로 출력되어

min = Math.min(arr[i], arr[i]); 로 고쳐서 풀었더니 테스트 실행은 잘되었다.

 

착각이었다.

 

min = Math.min(arr[i], arr[i]); 로 하면 안되는 이유

 

 

arr[i] 끼리 비교하면 최종적으로는 min 값이 맨 마지막 배열에 있는 것이 출력되게 된다.

테스트 코드에서 성공했던 이유는 arr[i]의 마지막 배열에 최솟값이 들어있었기 때문이었다.

 

 

해결방안

 

int min = arr[0]; 으로 초기화해주고, min = Math.min(min, arr[i]); 으로 비교해주면 arr[i] 값 중에서 가장 작은 값을 출력할 수 있게 된다.

 

 

[정답 코드]

import java.util.*;
import java.lang.Math;

class Solution {
    public int[] solution(int[] arr) {
        int[] answer = {};
        List<Integer> list = new ArrayList<>();
        
        int min = arr[0];
        
        if(arr.length <= 1){
            answer = new int[1];
            answer[0] = -1;
        }else{
            for(int i=0; i<arr.length; i++){
                min = Math.min(min, arr[i]);
                list.add(arr[i]);
            }
            
            list.remove(Integer.valueOf(min));
            answer = new int[list.size()];
            
            for(int j=0; j<list.size(); j++){
                answer[j] += list.get(j);
            }
        }
        return answer;
        
    }
}
반응형