[프로그래머스_Java_Lv0] 원소들의 곱과 합 .Arrays.stream().reduce() , IntStream.of(numbers).reduce

박경희·2025년 2월 7일

코딩테스트

목록 보기
51/69

Arrays.stream(num_list).sum()

    public int solution(int[] num_list) {
        int result = 1;

        int sum = Arrays.stream(num_list).sum();
        for (int num : num_list) {
            result *= num;
        }
        return result > (sum * sum) ? 0 : 1;
    }

for

public int solution(int[] num_list) {
        int multiply = 1;
        int sum = 0;

        for (int num : num_list) {
            multiply *= num;
            sum += num;
        }
        return multiply > (sum * sum) ? 0 : 1;
    }

Arrays.stream().reduce()

import java.util.Arrays;

public int solution(int[] num_list) {
        int multiply = Arrays.stream(num_list).reduce(1, (a, b) -> a * b);
        int sum = Arrays.stream(num_list).sum();
        
        return multiply > (sum * sum) ? 0 : 1;
    }
  1. Arrays.stream(num_list)

    • num_list(정수 배열)를 스트림(Stream) 으로 변환.
    • 즉, num_list 배열의 각 요소를 순차적으로 처리할 수 있는 스트림을 생성.
  2. .reduce(1, (a, b) -> a * b)

    • reduce(초기값, 누적 연산) 형태로 배열의 모든 요소를 하나의 값으로 축약(누적 계산) 하는 함수.
    • 1 → 초기값 (곱셈에서는 1을 사용해야 함, 만약 0을 사용하면 무조건 0이 한다.)
    • (a, b) -> a * b → 누적 연산 (현재 값 a와 다음 값 b를 곱함)
  • int[] 배열을 IntStream으로 변환하지만, 배열 전체를 처리할 수도 있다.

IntStream.of(numbers).reduce

import java.util.Arrays;
import java.util.stream.IntStream;

public static int solution(int[] num_list) {
        int multiply = IntStream.of(num_list).reduce(1, (a, b) -> a * b );
        int sum = Arrays.stream(num_list).sum();
        return multiply > (sum * sum) ? 0 : 1;
    }
  • IntStream.of(numbers) → 배열을 직접 IntStream으로 변환.
  • reduce(1, (a, b) -> a * b) → 모든 요소를 곱함.
  • IntStream.of(numbers)는 내부적으로 Arrays.stream(numbers)와 유사하게 동작하지만,
    더 명확하게 IntStream을 생성한다.

결론

IntStream.of(numbers)를 사용하는 것이 더 명확하고 직관적이다.

  • IntStream을 직접 생성하므로 더 직관적이고, 성능적으로 약간 유리하다.
  • Arrays.stream(numbers)가 가끔 Stream<int[]>로 변환될 수 있는 경우를 방지할 수 있다.

0개의 댓글