[프로그래머스][Java] Lv.0 배열의 평균값

0_0ni·2023년 1월 19일

문제 설명

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


제한 사항

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

입출력 예

numbersresult
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]5.5
[89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]94.0

입출력 예 설명

입출력 예 #1

numbers의 원소들의 평균 값은 5.5입니다.

입출력 예 #2

numbers의 원소들의 평균 값은 94.0입니다.


풀이

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

다른 풀이

for문에서 i의 증감식을 변경하면 코드를 줄일 수 있다.

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

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

스트림(Streams)

람다를 활용할 수 있는 기술 중 하나이다. 스트림은 '데이터의 흐름'으로, 배열 또는 컬렉션 인스턴스에 함수 여러 개를 조합해서 원하는 결과를 필터링하고 가공된 결과를 얻을 수 있다. 또한 람다를 이용해 코드의 양을 줄이고 간결하게 표현 가능하며, 배열과 컬렉션을 함수형으로 처리할 수 있다.

배열 스트림

String[] arr = new String[]{"a", "b", "c"};
Stream<String> stream = Arrays.stream(arr);
Stream<String> streamOfArrayPart = Arrays.stream(arr, 1, 3);
//1~2요소 [b,c] 

스트림의 집계함수

sum(), count(), average(), max(), min()

Optional

객체를 포장해주는 Rapper class. NullPointerException 예외처리를 간단하게 할 수 있다.

  • of() : Optational에 값이 반드시 있어야 하는 객체인 경우에 값을 넣어주는 역할을 한다.
  • ofNullable() : null인 경우 비어있는 Optional을 반환
  • orElse() : Optional 객체가 null이 아니면 값을 가져오고, null이면 Optional 인자 타입과 같은 타입을 반환

참고: https://futurecreator.github.io/2018/08/26/java-8-streams/
https://cjw-awdsd.tistory.com/41

0개의 댓글