[사전 코스] Programmers - 제일 작은 수 제거하기

Kim Hyen Su·2024년 3월 12일
0

⏲️ 알고리즘

목록 보기
84/95

알고리즘 로직 설명

매개변수로 받은 int[] 배열 내에서 가장 작은 수를 제거한 배열을 반환하는 함수.

단, 반환하는 배열이 비어있는 경우(최솟값 빼기 전 사이즈가 1인 경우) -1을 배열에 담아서 반환.

해당 문제에서는 int[] 배열에서 최솟값을 찾는 방식에 대해 고민하다가 마땅한 결론이 나오지 않아 시간 안에 풀지 못했던 문제이다.

팀원들의 도움을 받아서 해당 코드를 작성했다.

😀 성공

import java.util.*;

class Solution {
    public int[] solution(int[] arr) {
        if (arr.length == 1) {
            return new int[]{-1};
        }
        ArrayList<Integer> arrList = new ArrayList<>();
        for (int i : arr) {
            arrList.add(i);
        }
        arrList.remove(Collections.min(arrList));
        int[] answer = new int[arrList.size()];
        for (int i = 0; i < answer.length; i++) {
            answer[i] = arrList.get(i);
        }
        return answer;
    }
}

위 코드는 배열을 ArrayList에 담은 뒤 자바에서 제공하는 Collections 라는 클래스를 사용하여 리스트 내 최솟값을 리스트에서 제거하는 방식의 코드이다.

Stream 또는 Collections를 통해서 쉽게 구현할 수 있는 여러가지 방식의 메서드들을 잘 활용하고 눈으로 익혀두어야 겠다는 생각이 들었다.

참고

위 문제를 보던 중 List 타입의 객체를 배열로 변환하는 방법에 대한 고민이 생겼다.

Java 문서를 확인하던 중 Stream에 mapToInt()라는 메서드를 알게됐다. 해당 메서드는 IntStream을 반환하고 IntStream 내부에는 toArray() 라는 메서드를 통해 int[] 을 반환하는 메서드가 정의돼 있다. 이를 사용하여 List를 int[] 타입의 배열로 변환하는 코드를 짜보았다.

		ArrayList<Integer> arr2 = new ArrayList<>();

        for(int i=0; i<10; i++){
            arr2.add(i);
        }

        int[] intArray = arr2.stream().sorted().mapToInt(Integer::intValue).toArray();

        System.out.println(Arrays.toString(intArray));

위처럼 구현하면 배열로 반환되는것을 확인할 수 있다.👍

profile
백엔드 서버 엔지니어

0개의 댓글