문제: 정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.
class Solution {
public int[] solution(int[] arr) { // ex) [4, 3, 2, 1]
if (arr.length == 1) { // 배열의 길이가 1인지 확인
return new int[]{-1}; // -1 리턴
}
int min = arr[0]; // 가장 작은 수 찾기
for (int i = 1; i < arr.length; i++) {
if (arr[i] < min) { // min보다 작은 숫자 나오면
min = arr[i]; // min 바꾸기
}
}
int[] answer = new int[arr.length - 1]; // 원래 배열보다 길이가 1 작아짐
int index = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] != min) { // min이 아닌 숫자만 새 배열에 넣음
answer[index] = arr[i];
index++;
}
}
return answer; // ex) [4, 3, 2]
}
}
흐름은 기본형과 같다
import java.util.ArrayList;
class Solution {
public int[] solution(int[] arr) {
if (arr.length == 1) {
return new int[]{-1};
}
int min = arr[0];
for (int i = 0; i < arr.length; i++) {
if (arr[i] < min) {
min = arr[i];
}
}
ArrayList<Integer> list = new ArrayList<>();
for (int i = 0; i < arr.length; i++) {
if (arr[i] != min) {
list.add(arr[i]);
}
}
int[] answer = new int[list.size()];
for (int i = 0; i < list.size(); i++) { // ArrayList를 다시 int[] 배열로 바꿔서 return
answer[i] = list.get(i);
}
return answer;
}
}
가장 작은 수의 값이 아니라 가장 작은 수의 위치를 찾는 방식
class Solution {
public int[] solution(int[] arr) {
if (arr.length == 1) {
return new int[]{-1};
}
int minIndex = 0;
for (int i = 1; i < arr.length; i++) {
if (arr[i] < arr[minIndex]) {
minIndex = i;
}
}
int[] answer = new int[arr.length - 1];
int index = 0;
for (int i = 0; i < arr.length; i++) {
if (i != minIndex) { // 가장 작은 수가 있는 위치만 빼고 새 배열에 넣기
answer[index] = arr[i];
index++;
}
}
return answer;
}
}
import java.util.Arrays;
class Solution {
public int[] solution(int[] arr) {
if (arr.length == 1) {
return new int[]{-1};
}
int min = Arrays.stream(arr).min().getAsInt(); // 배열에서 가장 작은 수를 찾는다
return Arrays.stream(arr)
.filter(num -> num != min) // 작은 수가 아닌 숫자만 남기기
.toArray();
}
}