문제 설명
정수를 저장한 배열, 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] | [-1] |
문제 풀이
class Solution {
public int[] solution(int[] arr) {
if(arr.length == 1){
int[] a = new int[] {-1};
return a;
}
int min = Integer.MAX_VALUE;
int idx = 0;
for(int i = 0; i < arr.length; i++){
if(min > arr[i]){
idx = i;
min = arr[i];
}
}
int len = arr.length;
int[] answer = new int [len -1];
int i = 0, j = 0;
while(j < len -1){
if(idx != i){
answer[j] = arr[i];
j++;
}
i++;
}
return answer;
}
}
- 배열을 오름차순, 내림차순으로 정렬 후 제거하면 안 되고 주어진 원소 순서대로 출력해야 한다.
- 배열 크기가 1개일 때의 예외 처리로 -1 return부터 처리
- 가장 작은 수의 배열 인덱스를 알기 위해서 min 변수 선언 후 for 문 순환하며 idx에 가장 작은 수 인덱스 저장
- answer 배열은 arr 배열 길이의 -1 해서 선언한다.
- while 또한 arr 배열 길이의 -1 (answer 배열은 가장 작은 수를 제외한 배열)
- if 문으로 가장 작은 수 인덱스를 저장한 idx 변수와 같이 않을 때 answer 배열에 넣어준다.
- while문에서 i 변수는 돌 때마다 ++ 증가되지만 j 변수는 if 문 안에서 증가되는 것이 포인트이다.