제일 작은 수 제거하기

문제


나의 생각

해당문제는 어려운 문제는 아니다 단순히 배열에서 작은 값만 빼고 배열의 길이를 줄여야 하는 단순한 문제이다. 

하지만 해당 문제를 stream으로 풀고자 하니 생각보다 시간이 걸렸던 부분들이 있다. 

List 자료구조를 사용하여 배열내에 있는 제일 작은 값만 삭제하고 다시 배열로 변환 하는 방식으로 접근 하였다. 


나의 답안

public static int[] solution(int[] arr) {
    List<Integer> list = new ArrayList<>();
    for (int a : arr){
        list.add(a);
    }
    int min = Arrays.stream(arr).min().orElse(0);
    list.remove(Integer.valueOf(min));
    int[] ints = list.stream().mapToInt(Integer::intValue).toArray();
    return ints.length > 0 ? ints : new int[]{-1};
}

다른 답안

매개 변수로 들어온 배열의 길이가 1이면 바로 -1값을 가진 배열을 반환함. 

매개변수 arr에서 가장 작은 값을 int 값으로 변환.

return에서 filter를 사용하여 가장 작은 값과 다른 것들만 배열로 변환하여 반환.

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();
  }
}

공부한 내용

list.remove는 객체 주소를 삭제하고 index 기준으로 삭제한다. 하지만 기본형인 정수 타입들은 index로 인식하여 제대로 원하는 값을 삭제하지 못하는데 Integer.valueOf() 함수를 사용하면 주소값으로 변환이 되어 삭제가 가능해진다. 

'Programmers 문제풀이 > Lv.1' 카테고리의 다른 글

수박수박수박수박수박수?  (0) 2023.03.15
가운데 글자 가져오기  (0) 2023.03.15
음양 더하기  (0) 2023.03.14
나누어 떨어지는 숫자 배열  (0) 2023.03.14
서울에서 김서방 찾기  (0) 2023.03.14