프로그래머스/Lv. 1

[프로그래머스 코딩테스트] 제일 작은 수 제거하기(Java)

Sigfriede 2023. 5. 22. 01:20

  문제 설명

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

 

  제한사항

  • arr은 길이 1 이상인 배열입니다.
  • 인덱스 i, j에 대해 i != j 이면 arr[i] != arr[j] 입니다.

 

  입출력 예

arr return
[4, 3, 2, 1] [4, 3, 2]
[10] [-10]
class Solution {
    public int[] solution(int[] arr) {
        int[] answer;
        if (arr.length == 1) {
            answer = new int[]{-1}; 
        } else {
            answer = new int[arr.length - 1];
        }
        
        int min = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (min > arr[i]) {
                min = arr[i];
            }
        }
        int index = 0;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] != min) {
                answer[index++] = arr[i];
            }
        }
        return answer;
    }
}

  answer 배열을 생성합니다. if문에서 arr의 길이가 1이라면 빈 배열을 반환하게 되므로 -1을 반환할 수 있도록 합니다. 만약 배열의 길이가 2 이상이라면 가장 작은 수를 제외하여 arr의 길이에서 1을 뺀 값을 크기로 지정합니다.

  min은 배열에서 가장 작은 원소를 값으로 가질 변수입니다. 저는 arr의 0번째 원소를 초기화값으로 했습니다. 원소 중에서 최소값을 구할 것이므로 가장 정확한 초기화 방법일 것입니다. for문이 1부터(0번째 원소로 초기화했으므로 0은 생략) arr의 길이만큼 순회합니다. if문에서 만약 min이 arr의 i번째 원소보다 크다면 arr의 i번째 원소가 더 작은 수라는 뜻입니다. min에 arr의 i번째 원소를 할당하여 값을 갱신합니다.

  index 변수를 생성합니다. answer의 index를 담당하는 변수입니다.

  for문이 arr의 길이만큼 순회합니다. if문에서 만약 arr의 i번째 원소가 min이 아니라면 answer의 index번째 원소에 arr의 i번째 원소를 할당합니다. if문의 조건을 이용함으로써 arr 배열에서 가장 작은 원소를 제외하고 answer 배열에 arr 배열의 원소를 추가하는 것입니다.