개발바닥 아방수

프로그래머스 12935. 제일 작은 수 제거하기 (java) 본문

코딩테스트/프로그래머스

프로그래머스 12935. 제일 작은 수 제거하기 (java)

앙큼아기 2023. 9. 15. 00:10

 

나에게 이 문제는 stream 함수를 잘 활용하는 것이 관건이었다.

하여 관련 함수들도 같이 정리해보려고 한다.

먼저 제출한 답안은 다음과 같다.

 

import java.util.*;

class Solution {
    public int[] solution(int[] arr) {
        
        // 최소값
        int minVal = Arrays.stream(arr).min().orElse(Integer.MAX_VALUE);
        
        // 배열 길이가 1인 경우 -1 리턴
        // 이외에는 최소값 필터링 해서 리턴
        int[] answer = (arr.length == 1) ? ( new int[] {-1} ) : (Arrays.stream(arr).filter(val -> val != minVal).toArray());
        
        return answer;

    }
}

 

- 해당 문제는 최소값을 제외하고, 들어온 배열 순서는 그대로 리턴해야한다.

- 나의 경우 최소값을 구해서 필터링 하였다. 이때 min() 메서드의 리턴타입을 고려하여 orElse() 메서드를 함께 써준다. orElse() 메서드 안의 인자는 기본값 설정이다.

- filter 메서드는 조건을 만족하는 요소만을 가지고 새로운 스트림을 생성한다. 내가 뽑고 싶은 조건을 넣어주면 된다!

 


기억할 메서드 3가지

1. min()

2. orElse()

3. filter()

 

 

 

min()과 orElse() 메서드는 Java 스트림에서 사용되는 메서드다. 각각의 역할을 살펴보면 다음과 같다.

  1. min() 메서드:
    • min() 메서드는 스트림에서 가장 작은 값을 찾을 때 사용됩니다.
    • 스트림의 요소를 비교하여 가장 작은 값을 찾고, 이 값을 Optional<T> 객체로 반환합니다. 이 때 T는 스트림 요소의 타입입니다.
    • min() 메서드의 반환 값은 Optional<T>이므로, 값이 존재하지 않을 수도 있습니다. 이는 스트림이 비어있을 때나 최솟값을 찾지 못했을 때 발생할 수 있습니다.
  2. orElse() 메서드:
    • orElse() 메서드는 Optional<T> 객체에서 값을 꺼내오는 메서드입니다.
    • Optional<T> 객체가 값이 존재하지 않을 때, 즉 비어있을 때 기본값을 제공할 수 있습니다.
    • orElse() 메서드의 인자로는 기본값을 넣습니다. 따라서 Optional이 비어있을 때 이 기본값이 반환됩니다.

위의 코드에서 사용된 min() 메서드에서는 가장 작은 값을 찾기 위해 사용되었고, orElse(Integer.MAX_VALUE)에서는 스트림이 비어있을 경우 가장 작은 값이 없을 때를 대비하여 기본값으로 Integer.MAX_VALUE를 설정하였습니다. 이렇게 함으로써 스트림이 비어있을 때 오류가 발생하지 않고 안전하게 최솟값을 찾을 수 있습니다.