정수를 저장한 배열, 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) {
int[] answer;
if ( arr.length == 1 ) {
answer = new int[1];
answer[0] = -1;
return answer;
}
answer = new int[arr.length-1];
int min = arr[0];
for ( int i : arr ) min = Math.min(i, min);
int j = 0;
for ( int i = 0; i < arr.length; i++) {
if ( arr[i] == min ) continue;
answer[j++] = arr[i];
}
return answer;
}
}
public int[] solution(int[] arr) {
int[] answer;
반환 타입이 int 배열
인 solution
메서드이다.
매개변수로는 int[]
타입의 arr
가 주어진다.
최솟값을 제거한 나머지 arr
값들을 저장할 answer
배열을 선언해준다. 미리 배열을 생성하지 않는 이유는 arr
에 들어있는 값의 개수가 한 개일 때 answer
배열의 크기가 0
이 되어버리기 때문이다. 0
이 되어버리면 리턴해야하는 -1
을 저장할 공간이 없어지게 되기 때문에 선언만 하고 나머지 생성 부분은 if문
다음으로 미루는 것이다.
if ( arr.length == 1 ) {
answer = new int[1];
answer[0] = -1;
return answer;
}
answer = new int[arr.length-1];
앞서 우려했던 상황인 arr
의 크기가 1
일 경우를 대비하는 if문
이다.
만약 arr.length
가 1
이라면 answer
을 방 1
개로 생성한다. 그 후 answer[0]
방에 -1
을 저장한 뒤 return answer
을 하여 -1
을 반환시켜준다.
여기서 return -1
을 안 하는 이유는 solution
메서드의 반환 타입이 int[]
이기 때문에 return
할 때도 정수형 배열로 반환해주어야 하기 때문이다.
만약 arr.length
의 크기가 2
이상이라면 answer
의 크기가 0
이 될 가능성은 없기 때문에 arr.length-1
만큼 answer
배열을 생성해준다. 이 때 arr.length
에 1
을 빼는 이유는 최솟값은 답에 들어가지 않기 때문에 1
을 빼준 것이다.
int min = arr[0];
for ( int i : arr ) min = Math.min(i, min);
최솟값을 구할 차례이다.
최솟값을 구하는 기준이 될 min
변수에 arr[0]
이 초기값으로 주어진다.
향상된 for문
을 사용하여 for문
구조를 단순화시킨다. arr
값이 없을 때까지 arr
의 값들을 차례로 i
에 대입시켜 주어진 문제를 풀 수 있다.
Math.min()
은 Math
클래스의 두 수 중에서 최솟값을 구하는 min()
메서드이다. 두 매개변수 중에서의 최솟값을 구할 수 있다. 이 코드에서는 arr
값인 i
와 min
값을 비교하여 최솟값을 min
변수에 저장하는 방식으로 최솟값을 구하였다.
int j = 0;
for ( int i : arr ) {
if ( i == min ) continue;
answer[j++] = i;
}
return answer;
이제는 최솟값을 뺀 나머지 수들을 answer
배열에 저장해야 한다.
최솟값을 뺀 나머지 수를 저장할 answer
의 요솟값을 나타낼 j
를 0
으로 초기화시켜준다. 이는 arr
와 answer
의 요솟값의 변수를 차이를 둬야하기 때문이다.
마찬가지로 향상된 for문
을 사용하여 문제를 풀었다. arr
값이 없을 때까지 arr
에 들어있는 값을 i
에 대입하여 구조를 단순화하였다.
만약 i
가 min
이라면, 즉 i
의 값이 최솟값이라면 continue
를 사용하여 최솟값이 answer
에 들어가지 않도록 하였다.
i
가 최솟값이 아니라면 answer
의 j
번째 방에 i
를 저장한 뒤 j
의 값을 1
증가시켜 다음 방을 준비한다.
최솟값을 뺀 나머지 수를 answer
에 저장한 뒤에는 answer
을 return
하여 프로그램을 종료한다.