본문 바로가기
코딩 테스트/[JAVA] programmers 코딩 테스트 연습

[Programmers/JAVA] 제일 작은 수 제거하기 / 프로그래머스 코딩 테스트 연습

by M개발자 2021. 6. 15.
반응형

제일 작은 수 제거하기


문제 설명

 

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


예시

 

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

코드 해석 및 전체 코드

 

JAVA 알고리즘

1-1. arr 배열의 길이가 1일 시 -1 저장 후 반환

1-2. answer 배열의 길이 arr 배열 - 1로 잡기

2. 최소값 구하기

3. 최소값과 arr 배열의 원소가 같다면 건너뛰고 나머지 값 넣기

 

1-2. answer 배열의 길이 arr 배열 - 1로 잡기

최소값을 제거한 배열이므로 원래 배열의 길이 - 제거한 원소로 길이를 잡는다. 

 

2. 최소값 구하기

최소값을 제거하기 위해 배열의 최소값을 구한다. 

배열 0번부터 끝까지 비교하므로 초기값은 배열의 0번방으로 잡는다.

for문은 배열 길이만큼 반복하고, arr[i]가 최소값보다 작을 경우 min은 arr[i]가 된다. 

 

3. 최소값과 arr 배열의 원소가 같다면 건너뛰고 나머지 값 넣기

arr 배열의 길이는 4, answer 배열의 길이는 3이다. 

코드에서 i는 arr의 길이만큼, j는 answer 배열에 저장하기 위한 변수이다. 

 

arr 배열의 길이만큼 for문을 반복한다.

arr 배열의 원소와 최소값이 같으면 반복을 건너 뛴다.

같지 않을 경우 answer[j]에 arr[i]를 넣는다. 

continue할 경우 i는 +1 된다. arr[1]이 min값과 같다면, continue를 하면서 answer[1]에 저장도 건너뛰게 된다. 

그러므로 answer에 저장하기 위한 변수를 따로 선언해주어야 한다. 

 

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

github

programmers

 

반응형

댓글