알고리즘 연습

[ 프로그래머스 ] 제일 작은 수 제거하기 JAVA

코딩하는 너구리 2020. 5. 4. 01:16
반응형

제일 작은 수 제거하기

 

문제 설명

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

 

제한 조건

  • arr은 길이 1 이상인 배열입니다.

  • 인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다.

     

입출력 예

[4,3,2,1] [4,3,2]
[10] [-1]

 

 

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

            int index = 0;
            for(int i = 0; i < size; i++){
                if(i == minIdx)
                    continue;
                else {
                    answer[index] = arr[i];
                    index++;
                }
            }
        }
        
        return answer;
    }
}

 

 

우선 정답으로 출력되는 배열 answer를 만들어주었습니다.

 

만약 입력으로 주어지는 배열의 길이가 1 이라면 arr[0]에 -1을 담아 바로 리턴해주었고

 

길이가 2이상일 경우에는 최소값(min)과 그때의 인덱스(minIdx)를 찾아주었습니다.

 

그 이후에 answer 배열에 min_index를 제외한 나머지 정수들을 담아주었습니다.

 

이때 단지 최소값으로 비교하면 최소값의 원소가 중복될 경우

 

배열의 정수값이 누락될 수 있기 때문에 이를 방지하기 위해 index변수를 사용하여

 

최소값을 한 번만 제외하고 모두 옮겨주도록 하였습니다.

 

 

 

 

 

출처 : https://programmers.co.kr/learn/courses/30/lessons/12935

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

반응형