Programmers Lv.1 - 제일 작은 수 제거하기[Java]

seren-dev·2022년 5월 1일

Programmers Lv.1

목록 보기
4/15

https://programmers.co.kr/learn/courses/30/lessons/12935

나의 풀이

List 사용

import java.util.*;

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

ArrayList<Integer> list = new ArrayList<>();: ArrayList 생성
Collections.min(리스트 변수) : 리스트의 최소값 찾아줌
list.indexOf(값): list에서 값의 인덱스 찾아줌
list.get(인덱스) : list는 list[i]를 사용할 수 없으므로 get() 메서드 사용


다른 사람의 풀이1

stream 사용
(속도는 느림)

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

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(i -> i != min).toArray();
        
    }
}
  • 배열을 stream으로 변경하여 최소값 찾음
  • 배열을 stream으로 변경하고 filter 함수를 사용하여 최소값을 제외하고 stream을 배열로 변환함

stream.toArray() : stream을 int 배열로 변환할 때

참고: Java : Stream을 배열로 변환


다른 사람의 풀이2

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

class Solution {
    public int[] solution(int[] arr) {
        if (arr.length == 1)
            return new int[]{-1};
        
        List<Integer> list = Arrays.stream(arr).boxed()
            .collect(Collectors.toList());
        
        Arrays.sort(arr);
        
        list.remove(list.indexOf(arr[0]));

        return list.stream().mapToInt(i->i).toArray();
        
    }
}

int[] -> List
List<Integer> list = Arrays.stream(arr).boxed().collect(Collectors.toList());

List -> int[]
list.stream().mapToInt(i->i).toArray();

stream.mapToInt() : 스트림을 IntStream으로 변환해주는 메서드다. IntStream을 제외한 모든 스트림에서 동일하게 제공하는 메서드다.

0개의 댓글