개?발/프로그래머스

제일 작은 수 제거하기(Java)

YUEIC 2024. 8. 6. 16:20


주어진 배열의 요소 중 가장 작은 요소를 제거한 배열을 반환해야한다.

배열은 선언시 정해진 크기를 변화시킬 수 없으므로 (기존 배열의 길이 - 1)만큼의 배열을 새로 만들고 그 요소를 채워야한다.

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

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

        //매개변수 배열의 최소값 저장
        int low = Arrays.stream(arr).min().getAsInt();

        //최소값을 뺀 요소를 담을 리스트
        List<Integer> answerList = new ArrayList<>();

        //최소값과 일치하지 않는 값만 리스트에 추가
        for(int i = 0 ; i < arr.length; i++){
            if(arr[i] != low){
                answerList.add(arr[i]);
            }
        }

        //리스트를 배열로 변환
        answer = answerList.stream().mapToInt(Integer::intValue).toArray();

        //반환할 배열의 길이가 0이라면 요소를 -1 추가
        if(answer.length == 0){
            answer = new int[]{-1};
        }
    
        return answer;
    }
}

 

java의 stream을 사용해 최소값을 구했다.

그리고 보다 직관적으로 요소를 채우기 위해 리스트를 사용했고 해당 리스트에 값을 add 했다.

리스트는 배열과 다르게 요소를 추가, 삭제할 때마다 증가, 감소가 이뤄지기 때문.

이후 그 리스트를 다시 배열로 전환한 후 반환했다.

리스트를 배열로 전환할 때도 stream을 사용했지만 for문을 통해 변환해도 된다. 

 

다만 리스트에 포함된 요소는 int형이 아닌 Integer형이기 때문에 언박싱이 필요하다.

(ex. int -> Integer 은 박싱 / Integer -> int 는 언박싱

int는 자료형 Integer는 객체로서 리스트는 자료형을 담지 못한다.)

 

'개?발 > 프로그래머스' 카테고리의 다른 글

가운데 글자 가져오기(Java)  (0) 2024.08.06
핸드폰 번호 가리기(Java)  (0) 2024.08.06
나누어 떨어지는 숫자배열 (Java)  (0) 2024.08.05
음양 더하기 (Java)  (0) 2024.08.01
콜라츠 추측 (Java)  (0) 2024.08.01