코딩테스트 연습/프로그래머스 LV.0

[프로그래머스] Lv.0 배열의 평균값 - 자바(Java)

5ein 2023. 4. 15. 03:25

문제: https://school.programmers.co.kr/learn/courses/30/lessons/120817

문제설명

정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소의 평균값을 return하도록 solution 함수를 완성해주세요.


제한사항

  • 0 ≤ numbers의 원소 ≤ 1,000
  • 1 ≤ numbers의 길이 ≤ 100
  • 정답의 소수 부분이 .0 또는 .5인 경우만 입력으로 주어집니다.

나의 문제 풀이

class Solution {
    public double solution(int[] numbers) {
        double answer = 0;
        double sum = 0;
        for(int i = 0; i < numbers.length; i++) {
            sum += numbers[i];
        }
        answer = sum/numbers.length;
        return answer;
    }
}

다른사람의 문제 풀이

import java.util.Arrays;

class Solution {
    public double solution(int[] numbers) {
        return Arrays.stream(numbers).average().orElse(0);
    }
}

다른분들의 문제풀이를 보면 와 이렇게도 풀수가 있구나, 와 저게 뭐지...? 하는 두가지 생각중 하나가 든다.

이 풀이는 보자마자 와 저게뭐지? 라는 생각이 들었다,

이것은 스트림(stream) 문법을 사용한 것 이라고 한다.!

 

Stream: 컬렉션, 배열등의 저장 요소를 하나씩 참조하며 함수형 인터페이스(람다식)를 적용하며 반복적으로 처리할 수 있도록 해주는 기능, 불필요한 코딩(for, if 문법)을 걷어낼 수 있고 직관적이다.

사용형태: 객체 집합.스트림생성().중개연산().최종연산();

 

- 재사용이 불가능하다.

- 병렬스트림은 여러 스레드가 작업한다.

여러쓰레드가 처리해주니 병렬스트림이 항상 성능면에서 유리해보일 수 있지만, 쓰레드가 많거나 스트림의 요소 수가 많지 않다면 오히려 쓰레드를 사용하는데 드는 오버헤드가 더 클 수도 있다.

 - 중개 연산은 미리하지 않는다.(지연 연산을 한다.)

이로써 얻는 장점은 미리 계산하면서 두 번 순회하는 짓을 안할 수 있게 된다는 점이다.

 

정보 출처: https://jeong-pro.tistory.com/165

 

 

문제 출처: 코딩테스트 연습 | 프로그래머스 스쿨 (programmers.co.kr)