본문 바로가기

카테고리 없음

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

문제 출처 - Programmers

문제는 여기

 

코딩테스트 연습 - 제일 작은 수 제거하기

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

programmers.co.kr


[풀이]

1. clone을 사용해 입력받은 배열의 복사본을 만들어준다.

2. 배열의 길이가 1이라면 빈 배열이 될 것이므로 -1을 담고 바로 리턴해준다.

3. 1개의 숫자를 제거한 배열이 될 것이므로 사이즈를 입력받은 배열의 길이 -1로 만들어준다.

4. 복사한 배열을 오름차순으로 정렬한다.

5. 오름차순으로 정렬한 배열의 0번과 같은 숫자를 제외하고 answer에 담아준다.

6. 모든 수를 다 담으면 결과를 출력한다.

[접근]

1. 오름차순으로 정렬해서 가장 작은 수를 제거하면 되겠다고 생각하였다.

2. 그냥 오름차순으로 정렬을 하면 원래대로 돌리기 힘들므로 복사본을 만들어서 처리하면 되겠다고 생각하였다.

[코드]

import java.util.*;

class Solution {
    public int[] solution(int[] arr) {
        // arr 복사본
        int[] copy = arr.clone();

        // 크기가 1이라면 빈 배열이 될 것이니까 -1을 넣어줘야하므로 따로 처리
        if (arr.length == 1) {
            int[] answer = {-1};
            return answer;
        }
        else {
            // 1개의 숫자를 제거한 배열이므로 사이즈는 -1
            int[] answer = new int[arr.length - 1];
            // 복사한 배열을 오름차순으로 정렬
            Arrays.sort(copy);
            
            // answer의 인덱스
            int idx = 0;

            for (int i = 0; i < arr.length; i++) {
                // 제일 작은 숫자라면 생략
                if (arr[i] == copy[0]) {
                    continue;
                }
                // answer에 arr의 값을 넣기
                answer[idx++] = arr[i];
            }
            return answer;
        }
    }
}