주어진 배열의 요소 중 가장 작은 요소를 제거한 배열을 반환해야한다.
배열은 선언시 정해진 크기를 변화시킬 수 없으므로 (기존 배열의 길이 - 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 |