웹 프로그래밍

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

프로그래머스/level1

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

B. C Choi 2021. 10. 25. 22:19

 

문제 설명

 

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

 


 

제한 조건

 

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

2. 인덱스 i, j에 대해 i != j 이면 arr[i] != arr[j] 입니다.

 


 

입출력 예

 

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

 


 

풀이

1) Math.min을 사용한 풀이

Math.min(3, 2)는 두 수를 비교하여 더 작은 수 '2'를 출력한다.

class Solution {
    public int[] solution(int[] arr) {
        if(arr.length == 1) { // 길이가 1일 경우 answer에 -1 저장
            int[] answer = {-1};
            return answer;
        }
        
        int min = arr[0];
        
        for(int i = 1; i < arr.length; i++) {
            min = Math.min(min, arr[i]); // arr배열을 모두 비교 후, 제일 작은 수를 min에 저장
        }

        int[] answer = new int[arr.length - 1]; // 제일 작은 수를 제외한 모든 arr배열 값을 저장하기 위함
        int cnt = 0;
        
        for(int i = 0; i < arr.length; i++) {
            if(min == arr[i]) { // 제일 작은 수와 일치한다면 계속, 아니면 answer배열에 담기
                continue;
            }
            answer[cnt++] = arr[i];
        }        
    return answer;
    }
}

 

2) collection을 사용한 풀이

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

class Solution {
    public int[] solution(int[] arr) {
        int[] answer = {};

        if (arr.length == 1) { // 빈 배열인 경우 answer에 -1 담기
            answer = new int[] {-1};
        } else {
            List<Integer> list = new ArrayList<>();
            for (int a : arr) { // arr 배열의 모든 요소를 a에 저장
                list.add(a);
            }
            
            list.remove(Collections.min(list)); // list의 가장 작은 수 제거
            answer = new int[arr.length - 1];
        
            for (int i = 0; i < list.size(); i++) {
                answer[i] = list.get(i); // list를 answer에 저장
            }
        }
        return answer;
    }
}