포스트

첫 번째로 나오는 음수

https://school.programmers.co.kr/learn/courses/30/lessons/181896

문제

  • 문제 풀이
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    public class Solution {
      public int solution(int[] num_list) {
          for (int i = 0; i < num_list.length; i++) {
              if (num_list[i] < 0) {
                  return i; // 첫 번째로 나오는 음수의 인덱스 반환
              }
          }
          return -1; // 음수가 없는 경우 -1 반환
      }
    
      public static void main(String[] args) {
          Solution sol = new Solution();
          System.out.println(sol.solution(new int[]{12, 4, 15, 46, 38, -2, 15})); // 출력: 5
          System.out.println(sol.solution(new int[]{13, 22, 53, 24, 15, 6}));     // 출력: -1
      }
    }
    


  • Java 8의 Stream API와 Optional을 사용하여 문제를 해결
    • IntStream을 이용해서 주어진 배열을 순회하면서 음수를 찾고, 해당하는 첫 번째 음수의 인덱스를 반환하거나, 음수가 없으면 -1을 반환한다.

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      
        import java.util.OptionalInt; // OptionalInt는 값이 있을 수도 있고 없을 수도 있는 정수 값을 나타내는 데 사용된다.
        import java.util.stream.IntStream;
              
        class Solution {
            public int solution(int[] num_list) {
                OptionalInt firstNegativeIndex = IntStream.range(0, num_list.length)
                    .filter(i -> num_list[i] < 0)
                    .findFirst(); // 음수가 있는 첫 번째 인덱스 찾기
              
                return firstNegativeIndex.orElse(-1); // 음수가 없으면 -1 반환
            }
        }
      
      • filter(i -> num_list[i] < 0)는 스트림 요소를 필터링하는 데 사용되는 메서드이다. 이 경우, 주어진 배열 num_list에서 해당 인덱스의 값이 음수인 경우를 필터링하여 해당하는 인덱스를 가져온다.
        • i -> num_list[i] < 0는 람다 표현식이다. i는 배열의 인덱스를 나타내며, num_list[i] < 0는 해당 인덱스의 값이 0보다 작은지를 체크한다. 이 필터링된 결과를 통해 음수인 인덱스를 가져올 수 있다.
      • findFirst() 메서드는 Java 스트림에서 사용되는 메서드 중 하나로, 이 메서드는 스트림에서 첫 번째 요소를 반환한다. 스트림이 비어있는 경우에는 아무 값도 반환하지 않을 수 있다.
      • OptionalInt는 Java 8 이후부터 도입된 클래스로, 값이 있을 수도 있고 없을 수도 있는 값을 감싸는 래퍼 클래스이다. 기본 타입인 int의 값을 감싸기 위한 것으로, OptionalInt는 값이 있으면 해당 값을 반환하고, 값이 없으면 기본적으로 제공된 기본값을 반환한다.
      • orElse(-1)OptionalInt의 메서드로, firstNegativeIndex에 값이 있으면 해당 값을 반환하고, 값이 없으면 -1을 반환한다. 이렇게 하면 음수가 있는 첫 번째 인덱스를 반환하거나, 음수가 없으면 -1을 반환할 수 있다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.