본문 바로가기
Language/Java

[Programmers | Java | 연습문제 풀이] 제일 작은 수 제거하기 - Solution with Array 또는 arraycopy 또는 Stream API

by ㅇ달빛천사ㅇ 2024. 6. 24.
728x90

KDT 실무형 스프링 백엔드 엔지니어 양성과정 6기  |  Algorithm CODEKATA

🔢 제일 작은 수 제거하기

 

🏷 관련 주제 : 정렬 Array 




✔ Solution with Loop

import java.util.Arrays;

class Solution {
    public int[] solution(int[] arr) {
        int[] answer;
        int len = arr.length;
        
        if (len == 1) {
            answer = new int[]{-1};
            
            return answer;
        }
        
        int[] copyArr = arr.clone();
        Arrays.sort(copyArr);
        answer = new int[len - 1];
        int idx = 0;
        for (int n : arr) {
            if (n != copyArr[0]) {
                answer[idx++] = n;
            }
        }
        
        return answer;
    }
}
채점 결과


✔ Solution with arraycopy()

import java.util.Arrays;

class Solution {
    public int[] solution(int[] arr) {
        int[] answer;
        int len = arr.length;
        
        if (len == 1) {
            answer = new int[]{-1};
            
            return answer;
        }
        
        answer = new int[len - 1];
        int[] copyArr = arr.clone();
        Arrays.sort(copyArr);
        
        int min = copyArr[0];
        int idx = -1;
        
        for (int n : arr) {
            idx++;
            
            if (n == min) {
                System.arraycopy(arr, 0, answer, 0, idx);
                System.arraycopy(arr, idx + 1, answer, idx, len - idx - 1);
                break;
            }
        }
        
        return answer;
    }
}
채점 결과


✔ Solution with Stream API

import java.util.Arrays;

class Solution {
    public int[] solution(int[] arr) {
        int[] answer;
        
        if (arr.length == 1) {
            answer = new int[] {-1};
        } else {
            int m = Arrays.stream(arr).min().getAsInt();
            answer = Arrays.stream(arr).filter(x -> x != m).toArray();
        }
        
        return answer;
    }
}
채점 결과


💥 오늘 만난 문제 & 나의 시도 💦 & 해결 방법 👍

📌 오늘 만난 문제 : 매개변수로 받은 정수 배열에서 최소 원소를 제거한 후 반환하시오.


처음에는
배열의 길이가 1이면 매개변수로 받은 배열 arr의 0번 인덱스를 -1로 바꾸고 반환
배열의 길이가 1보다 크면 배열을 복사하여 오름차순 정렬한 후, 0번 인덱스의 최소원을 가져와
반복문을 돌면서 arr의 원소와 비교하여 최소원이 아닌 원소를 정수 배열 answer에 담아 반환하였다.

그런데 다른 방법으로도 코드를 쓸 수 있을 것 같아 배열을 복사 붙여넣기 하는 방법과
Stream API로도 코드를 작성해 보았다.

💬 무엇을 새롭게 알았는지

Stream API

  • 배열의 최소원 구하기 : Arrays.stream(배열).min().getAsInt();
    (Stream API에서 값을 int형으로 받을 때, getAsInt()를 사용하면 된다.)

배열에 값을 넣어서 초기화

  • int[] 배열 이름 = new int[] {원소1, 원소2, ...};


📚 References(참고 자료)







728x90


Top