제일 작은 수 제거하기_Java

컴투루·2022년 6월 21일
0

프로그래머스 Lv.1

목록 보기
9/38

연습문제

🔥 제일 작은 수 제거하기 🔥


👀 문제

정수를 저장한 배열 arr에서 가장 작은 수를 제거한 배열을 리턴하는 함수 solution을 완성해보자.
단, 리턴하는 배열이 빈 배열인 경우엔 배열에 -1을 채워서 리턴하도록 해야한다.


✔️ 조건

arr은 길이 1 이상인 배열
인덱스 i,j에 대해 i ≠ j이면 arr[i] ≠ arr[j]


👩‍💻 입력 & 🧙 출력

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

🙋‍♀️ 풀이

import java.util.ArrayList;
import java.util.Arrays;

class Solution {
    public int[] solution(int[] arr) {
        
        int[] temp = arr.clone();
        
        Arrays.sort(temp);
        int min = temp[0];
        
        ArrayList<Integer> list = new ArrayList<Integer>();
        
        for(int i=0;i<arr.length;i++){
            if(arr[i] != min){
                list.add(arr[i]);
            }
        }
        
        
        int[] answer;
        if(list.size()==0){
            answer= new int[1];
            answer[0] = -1;
        }else{
            answer = new int[list.size()];
            for(int i=0;i<list.size();i++){
                answer[i] = list.get(i);
            }
        }
        
        
        return answer;
    }
}
  1. temp에 arr을 복사해서 대입하고 sort메서드를 이용해서 오름차순으로 정렬

  2. 오름차순으로 정렬된 temp의 0번째 값을 min으로 대입 (최소값)

  3. ArrayList인 list를 선언

  4. arr의 길이만큼 반복문을 돌면서 만약 arr의 i번째 값이 min과 같지않을 때만 list.add를 통해 list에 대입

  5. 만약 리스트의 사이즈가 0과 같다면 answer를 길이가 1인 int자료형의 배열로 선언하고 -1을 대입

  6. 그렇지 않다면 answer를 길이가 list.size()이고 int 자료형의 배열로 선언해주고 반복문을 돌면서 list.get(i)를 통해서 answer[i]에 대입

⭐️ Object.clone()
배열의 깊은 복사를 할 수 있는 가장 보편적인 방법이다.
arr을 복사해서 temp에 저장했다.

⭐️ sort();
자바에서 배열이나 리스트를 정렬할 때 사용하는 메서드이다.
이를 사용하기 위해서는 import java.util.Arrays가 필수이다.

1) 오름차순
기본적으로 오름차순으로 정렬된다.

Arrays.sort(arr);

2) 내림차순
내림차순을 위해서는 Collections클래스의 reverseOrder()함수를 사용해야한다.

Arrays.sort(arr,Collections.reverseOrder());

👏 마무리

clone, sort등 배열과 리스트와 관련된 메서드들의 사용이 서툴어서 문제를 푸는데 시간이 오래 걸렸다. 자바 배열과 리스트의 기본적인 메서드들과 사용방법을 다시 공부해보면 좋을 것 같다.

profile
맘 먹으면 못할 게 없지

0개의 댓글